Добрый день!
Пытаюсь тут сделать очень хитрую штучку и никак не получается пока что
Очень нужно сформировать Word-отчет, в который нужно передать переменные и параметры, которые нужно вывести в отчете
Как бы это сделать?
Сам запрос, к сожалению, в виде XML передается в отчет
Движок уже сам разбирает его и формирует результирующий какой-то набор для отчета

Подскажите, пожалуйста, если кто сталкивался

Нравится

4 комментария

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Передать параметры действительно получилось через ProcessWordReportDataFill
Там была написана еще процедура, которая подменяла определенные макросы в тексте на переданные элементы из массива

А не подскажите еще? хотелось бы попробовать как-то нарисовать таблицу в Word из террасофта
Но пока не получается
Может кто-то пробовал рисовать в ворде из террасофта ?

Заранее благодарен за ответы

Иван, посмотрите здесь.

Показать все комментарии

Версия bpm 5.4.
Подскажите, как открыть URL карточки редактирования контрагента и передать туда параметр?

Например, есть у меня входящий звонок через Oktell, и я открываю карточку новой записи Контрагента http://.....?phone_number=8913...

В результате необходимо получить открытую карточку нового контрагента с заполненным полем "телефонный номер".

Нравится

20 комментариев

Здравтсвуйте, Илья!
Карточку редактирования из бизнес-процесса можно открыть с помощью действия "Открыть страницу".
Пример:
Создать Действие процесса (UserTask). Действие = Открыть страницу

Создать скрипт подготовки перед действием и написать в нем следующее:

EntitySchemaUId = Page.DataSource.SchemaUId;
string recordId = Guid.Empty.ToString(); //Id записи
string customParameter = "test";
 
UserTaskRunSAObjectEditPage.OpenerPage = Page;
UserTaskRunSAObjectEditPage.OpenerPage = Page;
UserTaskRunSAObjectEditPage.PageUId = EditPageUId; //UID вашей страницы
var parameters = new Dictionary<string, string> {
    {"recordId", recordId.ToString()},
    {"entitySchemaUId", EntitySchemaUId.ToString()}, //UID вашего объекта (не обязательно)
    {"treeGridId", Page.TreeGrid.ClientID}
    {"customParameter", customParameter}
};
UserTaskRunSAObjectEditPage.PageParameters = parameters;
UserTaskRunSAObjectEditPage.Centered = true;
UserTaskRunSAObjectEditPage.CloseOpenerOnLoad = false;

Затем на странице можно прочитать параметр:

string customParameter = Page.GetParameterValue("customParameter") != null ? Page.GetParameterValue("customParameter").ToString() : "" ;

А как открыть карточку по URLи передать в нее параметры из URL строки?

Илья,

Можно вручную распарсить URL и передать полученные значения параметров так, как было предложено в ответе Андрея Каспаревича (у действия "Открыть страницу" есть параметр PageUrl).

"Maxim Gritsenko" написал:

Илья,

Можно вручную распарсить URL и передать полученные значения параметров так, как было предложено в ответе Андрея Каспаревича (у действия "Открыть страницу" есть параметр PageUrl).

Да работает, а как реализовать, чтобы при загрузке страницы автоматически прочитывался параметр?
Поместил в процедуру PageInitScriptTaskExecute - ничего не происходит.
Вот скрин с кода: http://joxi.ru/HoeVU_3JTJAZY8FPihk

На ините источник данных еще не загружен.
Пользоваться следует событием PageLoadComplete, Андрей показывал как:

string customParameter = Page.GetParameterValue("customParameter") != null ? Page.GetParameterValue("customParameter").ToString() : "" ;
Page.TextEdit2.SetValue(customParameter);
Page.DataSource.ActiveRow.SetColumnValue("MyField", customParameter);

"Maxim Gritsenko" написал:

На ините источник данных еще не загружен.

Пользоваться следует событием PageLoadComplete, Андрей показывал как:

поместил в обработчик ScriptPageLoadCompleteExecute код:

if (Page.GetParameterValue("tel") != null)
{	Page.TextEdit2.Text= Page.GetParameterValue("tel").ToString();}

при загрузке страницы код не запускается

Илья, Вам необходимо использовать метод SetValue() также установить значение в ActiveRow

if (Page.GetParameterValue("tel") != null) {
   Page.TextEdit2.SetValue(tel);
   Page.DataSource.ActiveRow.SetColumnValue("MyField", tel);
}

"Lymar Maxim" написал:

Илья, Вам необходимо использовать метод SetValue() также установить значение в ActiveRow

Опять пустота.

Если я открываю карточку еще не созданного объекта, т.е. с recordid=00.... , то следующий код, как я понимаю не обязателен

Page.DataSource.ActiveRow.SetColumnValue("MyField", tel);

Даже если Page.TextEdit2.SetValue(tel)= "22222"; пишу, ничего не происходит.

Устанавливать значение следующим способом

Page.TextEdit2.SetValue(tel)= "22222"

нельзя.

сначала Вам нужно инициализировать переменную tel , например

string tel = "22222";

а затем вызвать для контрола TextEdit2 метод SetValue() следующим способом:

Page.TextEdit2.SetValue(tel);

Илья, могу предположить, что некорректно формируется URL страницы, пришлите пожалуйста URL сгенерированный страницей.

"Lymar Maxim" написал:string customParameter =

код такой:

if (Page.GetParameterValue("tel") != null) 
{
   string tel= Page.GetParameterValue("tel");
   Page.TextEdit2.SetValue(tel);
   Page.DataSource.ActiveRow.SetColumnValue("Phone", tel);
}

URL такая:

http://111-dns:81/0/ViewPage.aspx?Id=7a62325f2e73484ba21fc468db94f8f1&recordId=00000000-0000-0000-0000-000000000000&entitySchemaUId=08ca70da-f05a-4b29-9fac-cf824a4d45f2&treeGridId=PageContainer_ApplicationSectionPage_Grid_TreeGrid&SysModuleEditId=aaf43af2-d2dc-4aa9-b4d7-37532fdfca42&folderId=398ac1f5-53c7-467b-84d3-33a2b75e5d25&tel=8989

Илья, я создал простой бизнес процесс, с использованием вышеприведенных конструкций C#, который открывает карточку нового контакта. Его схема представлена на рисунке ниже.

В кодовом блоке "Подготовка параметров страницы" задаем объект и карточку редактирования объекта, также инициализируем параметр который будет передаваться в карточку нового контакта.

Guid EntitySchemaUId = new Guid("16BE3651-8FE2-4159-8DD0-A803D4683DD3");//Page.DataSource.SchemaUId;
string recordId = Guid.Empty.ToString(); //Id записи
string customParameter = "test";
 
Guid EditPageUId = new Guid ("10e5b380-25f3-474d-8dec-6b4084180ac7");
UserTaskOpenContactEditPage.PageUId = EditPageUId; //UID вашей страницы
var parameters = new Dictionary<string, string> {
    {"recordId", recordId.ToString()},
    {"entitySchemaUId", EntitySchemaUId.ToString()}, //UID вашего объекта (не обязательно)
    {"customParameter", customParameter}
};
 
UserTaskOpenContactEditPage.PageParameters = parameters;
UserTaskOpenContactEditPage.Centered = true;
UserTaskOpenContactEditPage.CloseOpenerOnLoad = false;
return true;

Далее в процессе карточки Контакта на PageLoadComplete считываем параметр и для примера выводим его в поле Адрес.

string customParameter = Page.GetParameterValue("customParameter") != null ? Page.GetParameterValue("customParameter").ToString() : "" ;
Page.AddressEdit.SetValue(customParameter);
Page.DataSource.ActiveRow.SetColumnValue("Address", customParameter);
return true;

Ниже представлена карточка контакта с параметром записанным в поле Адрес.

"Lymar Maxim" написал:

Добавил в ScriptPageLoadCompleteExecute карточки контакта код

string customParameter = Page.GetParameterValue("customParameter") != null ? Page.GetParameterValue("customParameter").ToString() : "" ;
Page.AddressEdit.SetValue(customParameter);
Page.DataSource.ActiveRow.SetColumnValue("Address", customParameter);

и при вызове страницы по URL

http://111-dns:81/0/ViewPage.aspx?Id=10e5b38025f3474d8dec6b4084180ac7&recordId=00000000-0000-0000-0000-000000000000&entitySchemaUId=16be3651-8fe2-4159-8dd0-a803d4683dd3&treeGridId=PageContainer_ContactsModulePage_Grid_TreeGrid&SysModuleEditId=d2ec5d94-7f80-e011-afbc-00155d04320c&folderId=f35a1295-dca5-df11-831a-001d60e938c6&customParameter=2423

в адрес ничего не записывается, вот скриншот: http://joxi.ru/uzWYU_3JTJBBYyJBKyg

Илья, URL страницы у Вас сформирован корректно, вероятнее всего, Вы производите считывание параметра до промежуточного генерирующешо сообщения "PageLoadComplete". Вам нужно считывать параметр в кодовом блоке обозначенном на рисунке ниже, после промежуточного генерирующешо сообщения "PageLoadComplete".

"Lymar Maxim" написал:


переход по URL происходит не из бизнес процесса, мне просто надо открыть URL и считать параметр
ввожу данные URL в браузере и надо считать параметр

Не важно, откуда происходит открытие страницы. Считывание параметра происходит в логике страницы, в предыдущем сообщение описывалось считывание параметра, а не открытие страницы.

такого скрипта PageLoadComplete нет, есть только ScriptPageLoadCompleteExecute
судя по вашему скриншоту у вас скрипт называется PageLoadCompleteScriptTask. Такого скрипта так же нет.

Из ScriptPageLoadCompleteExecute:
1. не считывается параметр
2. в интересующее поле даже константа не записывается

Илья, скрипт может называться как угодно, главное чтобы он был расположен после промежуточного генерирующего сообщения, выделенного красным на рисунке ниже.

Не получается.
Вот бизнес-процесс запуска: http://joxi.ru/t12iUxjKTJATH5qZNTs

А вот код в этом обработчике, который ничего не меняет в карточке:

Page.TextEdit2.SetValue("22222");

Илья, просьба проверить, чтобы в Вашем бизнес-процессе

в "промежуточном генерирующем сообщении" "ParentPageLoadComplete", был установлен признак "Отправить в родительский процесс".

И в скрипте "PageLoadCompleteScriptTask" устанавливалось значение и в контрол и в ActiveRow, пример в приведенном ниже коде.

string customParameter = Page.GetParameterValue("customParameter") != null ? Page.GetParameterValue("customParameter").ToString() : "" ;
Page.AddressEdit.SetValue(customParameter);
Page.DataSource.ActiveRow.SetColumnValue("Address", customParameter);

Также проверьте, пожалуйста, чтобы в "начальном сообщении" и в "промежуточном генерирующем сообщении" было прописано сообщение "PageLoadComplete".

Спасибо, теперь передается параметр.

Показать все комментарии

Добрый день! Как мне передать переменные из одного скрипта в другой с сохранением их значений??

Нравится

4 комментария

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

А можно какой нибудь маленкий пример?

function Example(Param_1, Param_2){
}

вызов функции:

Example(Value_1, Value_2);

Пример подключения скрипта в файле.

Спасибо за пример!

Показать все комментарии