24.01.2009, 11:21 | #1 |
Участник
|
Добавление контрола на форму загрузки файла
Мне необходимо на форму загрузки файла (доступно на вкладке Примечание), поместить контрол - DropDownList.
Суть данной необходимости в том, что бы пользователь при прикреплении файла указывал в этом контроле какой документ он загружает (Договор, Черновой договор и т.д.), после этого к имени файла добавлялся префикс, скажем так: Д_поставка xxx.pdf или ЧД_поставка xxx.doc. Стандартных средств кастомизации я не нашел... Есть ли какой-нибудь путь решения данной задачи? Вижу тут еще одно решение - изменение непосредственно файла *.aspx, но я думаю это отнюдь не верное решение... Подскажите, как это можно реализовать? Используется CRM 4.0 |
|
25.01.2009, 16:17 | #2 |
Moderator
|
Я думаю, самым верным решением в данном будет интеграция с WSS/SharePoint. По другому, видимо, никак. Более того, длинные имена файлов могут быть утеряны, так как при сохранении обратно на диск, эксплорер отчего-то съедает часть букв имени.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
25.01.2009, 22:14 | #3 |
Участник
|
Интеграция в том смысле, что писать веб-часть свою с загрузкой файлов?
|
|
26.01.2009, 09:44 | #4 |
Moderator
|
Подходы могут быть разные. В CRM вы в любом случае сможете вставить лишь IFrame, а что будет на странице, которую он будет отражать - вот это уже решать вам. Можно сделать и без всякого программирования. Возможно решение будет не слишком элегантным, но оно делается быстро и работает. Пример есть в книге Working With MS CRM 3.0 (вероятно и 4.0).
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.01.2009, 18:41 | #5 |
Участник
|
Хм. Ну возможно и такой вариант. Правда это тоже какой-то крюк получается. Из CRMки лезть в Sharepoint, что бы в Sharepoint'e загрузить документ в CRM Если ничего не получится, придется все же делать так. Или менять требования.
Спасибо! |
|
27.01.2009, 08:55 | #6 |
Moderator
|
Я думаю вам надо лишь немного заглянуть в будущее: сейчас это один выпадающий список, потом руководство захочет прикрепить к файлу уникальный регистрационный номер потом еще что-то и так вплоть до процесса согласования-утверждения текста договора и контроля версий. Разумно уже на первых порах привлечь SharePoint дабы провести профилактику и избежать обострения этого геморроя.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.01.2009, 14:46 | #7 |
Участник
|
Конечно, интеграция с разными продуктами это хорошо, но если нет такой возможности, либо оно просто не требуется, то почему все-таки не встроить в IFrame, как уже говорил Артем, свою aspx страницу с нужной логикой и любыми, какими хотите контролами?
Суть в том, что можно скрыть стандартную вкладку "Примечания" и на своей странице работать с annotation'сами самому для загрузки/выгрузки файлов в базу CRM. Могу, если нужно будет, скинуть код примера работы с этими примечаниями. |
|
27.01.2009, 17:01 | #8 |
Участник
|
Для записи в примечание файла (берется из FileUpload), соотвествующего нужному объекту:
Цитата:
annotation newAnnotation = new annotation();
newAnnotation.objectid = new Lookup(); //брал guid объекта из адресной строки newAnnotation.objectid.Value = new Guid(Request.Params["id"].ToString()); newAnnotation.filename = FileUpload1.FileName; newAnnotation.documentbody = Convert.ToBase64String(FileUpload1.FileBytes); EntityNameReference currentEntityReference = new EntityNameReference(); currentEntityReference.Value = EntityName.new_dogovor_documents.ToString(); newAnnotation.objecttypecode = currentEntityReference; service.Create((BusinessEntity)newAnnotation); Цитата:
//узнаем на какую ссылку кликнули
LinkButton currentlnkButton = ((LinkButton)e.Item.Controls[3]); //получаем коллекцию текущих примечаний (см. след. код) BusinessEntity[] curcollectAtt = GetAnnotations(); for (int i = 0; i < curcollectAtt.Length; i++) { if (((annotation)curcollectAtt[i]).filename == currentlnkButton.Text) { //получаем содержимое файла примечания в кодировке Base64 byte[] fileBuffer = Convert.FromBase64String(((annotation)curcollectAtt[i]).documentbody); //создаем новый файл с контентов полученного файла из примечания FileStream filestream = new FileStream(ConfigurationSettings.AppSettings["path"].ToString() + ((annotation)curcollectAtt[i]).filename, FileMode.Create, FileAccess.Write); for (int j = 0; j < fileBuffer.Length; j++) { filestream.WriteByte(fileBuffer[j]); } filestream.Close(); break; } } Цитата:
ColumnSet colsAtt = new ColumnSet();
colsAtt.Attributes = new string[] { "filename", "documentbody" }; ConditionExpression condAtt = new ConditionExpression(); condAtt.AttributeName = "objectid"; condAtt.Operator = ConditionOperator.Equal; condAtt.Values = new object[] { Request.Params["id"].ToString() }; OrderExpression orderAtt = new OrderExpression(); orderAtt.AttributeName = "createdon"; orderAtt.OrderType = OrderType.Descending; FilterExpression filterAtt = new FilterExpression(); filterAtt.Conditions = new ConditionExpression[] { condAtt }; QueryExpression queryAtt = new QueryExpression(); queryAtt.EntityName = EntityName.annotation.ToString(); queryAtt.Criteria = filterAtt; queryAtt.ColumnSet = colsAtt; queryAtt.Orders = new OrderExpression[] { orderAtt }; BusinessEntity[] collectAtt = service.RetrieveMultiple(queryAtt).BusinessEntities; Билд DataList'a происходит так: Цитата:
ICollection CreateDataSource()
{ DataTable dt = new DataTable(); DataRow dr; dt.Columns.Add(new DataColumn("TextValue", typeof(String))); BusinessEntity[] curcollectAtt = GetAnnotations(); for (int i = 0; i < curcollectAtt.Length; i++) { dr = dt.NewRow(); string currentName = ((annotation)curcollectAtt[i]).filename; dr[0] = currentName; dt.Rows.Add(dr); } DataView dv = new DataView(dt); return dv; } Цитата:
ItemsList.DataSource = CreateDataSource();
ItemsList.DataBind(); Цитата:
<aspataList ID="ItemsList" runat="server">
<ItemTemplate> <asp:LinkButton runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TextValue") %>'/> </ItemTemplate> </aspataList> |
|
|
За это сообщение автора поблагодарили: bstan (1), Dicora (1). |
Теги |
кастомизация, контрол, прикрепление файла, crm4 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|