AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.01.2009, 11:21   #1  
bstan is offline
bstan
Участник
Аватар для bstan
 
26 / 11 (1) +
Регистрация: 21.10.2008
Адрес: Екатеринбург
? Добавление контрола на форму загрузки файла
Мне необходимо на форму загрузки файла (доступно на вкладке Примечание), поместить контрол - DropDownList.
Суть данной необходимости в том, что бы пользователь при прикреплении файла указывал в этом контроле какой документ он загружает (Договор, Черновой договор и т.д.), после этого к имени файла добавлялся префикс, скажем так: Д_поставка xxx.pdf или ЧД_поставка xxx.doc.

Стандартных средств кастомизации я не нашел... Есть ли какой-нибудь путь решения данной задачи? Вижу тут еще одно решение - изменение непосредственно файла *.aspx, но я думаю это отнюдь не верное решение...

Подскажите, как это можно реализовать?
Используется CRM 4.0
Старый 25.01.2009, 16:17   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Я думаю, самым верным решением в данном будет интеграция с WSS/SharePoint. По другому, видимо, никак. Более того, длинные имена файлов могут быть утеряны, так как при сохранении обратно на диск, эксплорер отчего-то съедает часть букв имени.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 25.01.2009, 22:14   #3  
bstan is offline
bstan
Участник
Аватар для bstan
 
26 / 11 (1) +
Регистрация: 21.10.2008
Адрес: Екатеринбург
Интеграция в том смысле, что писать веб-часть свою с загрузкой файлов?
Старый 26.01.2009, 09:44   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Подходы могут быть разные. В 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  
bstan is offline
bstan
Участник
Аватар для bstan
 
26 / 11 (1) +
Регистрация: 21.10.2008
Адрес: Екатеринбург
Хм. Ну возможно и такой вариант. Правда это тоже какой-то крюк получается. Из CRMки лезть в Sharepoint, что бы в Sharepoint'e загрузить документ в CRM Если ничего не получится, придется все же делать так. Или менять требования.
Спасибо!
Старый 27.01.2009, 08:55   #6  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Я думаю вам надо лишь немного заглянуть в будущее: сейчас это один выпадающий список, потом руководство захочет прикрепить к файлу уникальный регистрационный номер потом еще что-то и так вплоть до процесса согласования-утверждения текста договора и контроля версий. Разумно уже на первых порах привлечь SharePoint дабы провести профилактику и избежать обострения этого геморроя.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 27.01.2009, 14:46   #7  
Alir is offline
Alir
Участник
 
47 / 14 (1) ++
Регистрация: 02.08.2008
Адрес: Санкт-Петербург
Конечно, интеграция с разными продуктами это хорошо, но если нет такой возможности, либо оно просто не требуется, то почему все-таки не встроить в IFrame, как уже говорил Артем, свою aspx страницу с нужной логикой и любыми, какими хотите контролами?

Суть в том, что можно скрыть стандартную вкладку "Примечания" и на своей странице работать с annotation'сами самому для загрузки/выгрузки файлов в базу CRM. Могу, если нужно будет, скинуть код примера работы с этими примечаниями.
Старый 27.01.2009, 17:01   #8  
Alir is offline
Alir
Участник
 
47 / 14 (1) ++
Регистрация: 02.08.2008
Адрес: Санкт-Петербург
Для записи в примечание файла (берется из 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);
Хранить записи я бы посоветовал в DataList'e с с LinkButton'ами с названиями документов, при клике на любой документ скачивается в нужную папку:
Цитата:
//узнаем на какую ссылку кликнули
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;
}
}
, где функция GetAnnotations:
Цитата:
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;
}
Далее эта функция используется как источник для DataList'a :
Цитата:
ItemsList.DataSource = CreateDataSource();
ItemsList.DataBind();
Описание DataList'a (в aspx):
Цитата:
<aspataList ID="ItemsList" runat="server">
<ItemTemplate>
<asp:LinkButton runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TextValue") %>'/>
</ItemTemplate>
</aspataList>
За это сообщение автора поблагодарили: bstan (1), Dicora (1).
Теги
кастомизация, контрол, прикрепление файла, crm4

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Личная разработка - средство импорта данных в базу CRM из файла Excel Likefire Dynamics CRM: Разработка 60 19.12.2011 16:51
Размер прикрепленного файла в MS CRM pkost Dynamics CRM: Администрирование 5 28.01.2009 12:02
Мир CRM: Зависание папки “Входящие” на стадии загрузки Outlook - Хотфикс готов Blog bot Dynamics CRM: Blogs 2 18.08.2008 19:50
Не передаются параметры с формы грида на пользовательскую форму tatra Dynamics CRM: Разработка 21 18.04.2008 19:46
Нет прикрипления файла к электронному письму pkost Dynamics CRM: Разработка 2 16.03.2007 10:17
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:08.