Версия bpm 5.4.
Подскажите, как открыть URL карточки редактирования контрагента и передать туда параметр?
Например, есть у меня входящий звонок через Oktell, и я открываю карточку новой записи Контрагента http://.....?phone_number=8913...
В результате необходимо получить открытую карточку нового контрагента с заполненным полем "телефонный номер".
Нравится
Здравтсвуйте, Илья!
Карточку редактирования из бизнес-процесса можно открыть с помощью действия "Открыть страницу".
Пример:
Создать Действие процесса (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();}
при загрузке страницы код не запускается
"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".