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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.09.2009, 10:29   #1  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Lightbulb Вложение файлов через метод .NET Business Connector (DocuRef, DocuValue)
Всем привет!

Появилась необходимость реализовать в аксапте статический метод, принимающий на вход бинарный массив с файлом, имя файла, путь к папке-хранилищу, номер таблицы (к которой производится вложение) и recId записи, к которой аттачим документ.

Сейчас копаю в таком направлении:

X++:
static void attachFile(TableId tableId, RecId recId, DataAreaId id)
{
    DocuActionFile    action;
    DocuRef       docuRef;
    ;

    // создаем ссылку:

    docuRef.ValueRecId = 0;
    docuRef.RefCompanyId = id;
    docuRef.RefTableId = tableId;
    docuRef.RefRecId = recId;
    docuRef.insert();
    
    //...  

}
И сразу натыкаюсь на проблему:
1. Как передать в метод бинарный массив?
2. Как скопировать бинарный файл в хранилище и указать все необходимые параметры (DocuValue, DocuRef) чтобы файл можно было открыть стандартным функционалом DAX (кнопкой документооборота)?

Есть ли какие-нибудь мысли?
Старый 09.09.2009, 11:42   #2  
AX2009
Гость
 
n/a
1. static void attachFile(TableId tableId, RecId recId, DataAreaId id, FileName fileName)
2. посмотри как это делает стандартный функционал и сделай так же

еще обрати внимание на то, где код исполняется - на сервере или клиенте.
За это сообщение автора поблагодарили: kornix (1).
Старый 09.09.2009, 15:34   #3  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от AX2009 Посмотреть сообщение
1. static void attachFile(TableId tableId, RecId recId, DataAreaId id, FileName fileName)
2. посмотри как это делает стандартный функционал и сделай так же

еще обрати внимание на то, где код исполняется - на сервере или клиенте.
Спасибо! Но вопрос немного не в этом.. Стандартным механизмом можно легко добавить файл примерно так (нашел на форуме, это работает):

X++:
static void joinFile(TableId tableId, RecId recId, DataAreaId id, DocuTypeId typeId)
{
    docuAction    action;
    DocuRef       docuRef;
    ;

    docuRef.ValueRecId = 0;
    docuRef.RefCompanyId = id;
    docuRef.RefTableId = tableId;
    docuRef.RefRecId = recId;
    docuRef.TypeId   = typeId;
    docuRef.insert();

    action = DocuAction::newDocuRef(DocuRef);
    action.unpack();

    action.add(docuRef);
}
Проблема в том что метод на вход должен принять бинарный тип данных, в этом и вопрос: как реализовать прием бинарной переменной и сохранить ее средствами Dynamics?
Старый 10.09.2009, 10:44   #4  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Вот тут обсуждалась проблема с приемом и сохранением файла.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 17.09.2009, 12:57   #5  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
Вот тут обсуждалась проблема с приемом и сохранением файла.
Спасибо! Но уже реализовал.. Файл необходимо сохранить на диск, файл можно передавать в метод как bindata _inputFile, у меня это делается в web приложении, в аксапте можно использовать метод bindata.save(). Вот метод который настраивает ссылки DocuRef и docuValue:

X++:
static void joinFileInternet(ITSMIncidentId _incidentId, FileName _fileName ,DataAreaId _id, str _fileType)
{

    DocuRef       docuRef;
    DocuType      docuType;
    DocuValue     docuValue;
    FileName      fn;
    FilePath      fp;
    FileType      ft;

    ;

    docuType = DocuType::find(ITSMParameters::find().DocuTypeId, false);


    ttsbegin;
    [fn, ft, fp] = Docu::splitFilename(_filename);

    docuValue.FileName = fn;
    docuValue.FileType = _fileType;
    docuValue.Path = fp;
    docuValue.Name = fn;
    docuValue.insert();
    ttscommit;

    ttsbegin;
    docuRef.RefTableId = tablenum(ITSMIncident);
    docuRef.RefRecId = ITSMIncident::find(_incidentId).recId;
    docuRef.Name = _fileName;
    docuRef.TypeId = docuType.TypeId;
    docuRef.RefCompanyId = _id;
    docuref.ValueRecId = docuValue.RecId;
    docuRef.insert();
    ttscommit;

}
За это сообщение автора поблагодарили: zZ_TOP_Zz (1).
Старый 17.09.2009, 13:07   #6  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
я бы для универсальности добавил бы TableId на вход для более универсального алгоритма
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
За это сообщение автора поблагодарили: kornix (1).
Старый 18.09.2009, 10:36   #7  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
я бы для универсальности добавил бы TableId на вход для более универсального алгоритма
zZ_TOP_Zz, готово! Вот универсальный метод, его можно применять к любой таблице и любой записи

X++:
static void joinFileInternet(TableId _tableId, RecId _refRecId, FileName _fileName ,DataAreaId _id, str _fileType)
{

    DocuRef       docuRef;
    DocuType      docuType;
    DocuValue     docuValue;
    FileName      fn;
    FilePath      fp;
    FileType      ft;

    ;

    docuType = DocuType::find(ITSMParameters::find().DocuTypeId, false);


    ttsbegin;
    [fn, ft, fp] = Docu::splitFilename(_filename);

    docuValue.FileName = fn;
    docuValue.FileType = _fileType;
    docuValue.Path = fp;
    docuValue.Name = fn;
    docuValue.insert();
    ttscommit;

    ttsbegin;
    docuRef.RefTableId = _tableId; //id таблицы с записью для добавления вложения
    docuRef.RefRecId = _refRecId; //recId записи, к кот. прикрепляется файл
    docuRef.Name = _fileName;
    docuRef.TypeId = docuType.TypeId;
    docuRef.RefCompanyId = _id;
    docuref.ValueRecId = docuValue.RecId;
    docuRef.insert();
    ttscommit;

}
За это сообщение автора поблагодарили: Silphidae (1), abri (1).
Теги
attachment, вложения, файл

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DynamicsAxSCM: Picking update via .Net Business Connector Blog bot DAX Blogs 0 15.07.2009 03:07
Arijit Basu: DAX 4.01 .NET Business Connector: Microsoft.Dynamics.BusinessConnectorNet Blog bot DAX Blogs 3 30.09.2008 01:17
Inside Dynamics AX 4.0: Working with the .NET Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
Inside Dynamics AX 4.0: Inside the Business Connector Blog bot DAX Blogs 0 04.10.2007 05:15
ALEG: Проект "Фишка недели" и первый пост - Microsoft Dynamics™ AX .NET Business Connector Blog bot DAX Blogs 1 22.11.2006 09:43

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

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

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