Регистрация  |  Вход

DocuSign

Ребят, помойму кто работал на данную контору. Нужна не большая помощь с их функционалом.

Ребят, помойму кто работал на данную контору. Нужна не большая помощь с их функционалом. 

Ну на контору я не работал)) Но интеграцию делал для демо

Ну на контору я не работал)) Но интеграцию делал для демо

От смотри, мы делаем примерно так:
1. There are two checkboxes on Booking record: DBC DS (DBC_DS__c) - Depot BC and DRA DS (DRA_DS__c) - Rental Agreement.
2. As soon as any of the checkboxes changed from false to true new custom trigger fires and calls appropriate method in the future class.
3. Initiated method collects all necessary data from Booking and sends HTTP json request to the DocuSign server through the API.
4. Based on sent data DocuSign generates template (which we set for each method in the custom setting) and sends e-mail (with embedded link) to the Client.
5. Using the link Client opens the Docusign wizard where fills all the necessary data and e-signature.
6. Once the document is signed, DocuSign using it's own DocuSign API call to SalesForce to update related to Booking record(s)

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

От смотри, мы делаем примерно так:
1. There are two checkboxes on Booking record: DBC DS (DBC_DS__c) - Depot BC and DRA DS (DRA_DS__c) - Rental Agreement.
2. As soon as any of the checkboxes changed from false to true new custom trigger fires and calls appropriate method in the future class.
3. Initiated method collects all necessary data from Booking and sends HTTP json request to the DocuSign server through the API.
4. Based on sent data DocuSign generates template (which we set for each method in the custom setting) and sends e-mail (with embedded link) to the Client.
5. Using the link Client opens the Docusign wizard where fills all the necessary data and e-signature.
6. Once the document is signed, DocuSign using it's own DocuSign API call to SalesForce to update related to Booking record(s)

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

Mike V там работает

Mike V там работает

Ну заюзайте Embedded Signing и он вернет в респонсе урл

Ну заюзайте Embedded Signing и он вернет в респонсе урл

Угу изучаем.

Угу изучаем.

DocuSign слушает, в чем именно проблема?

DocuSign слушает, в чем именно проблема?

Mike V
DocuSign слушает, в чем именно проблема?

Помощь пришла)

[quote="Mike V"]DocuSign слушает, в чем именно проблема?[/quote]
Помощь пришла)

Mike V
DocuSign слушает, в чем именно проблема?

Немного выше описано как сейчас у нас все работает.

Задача получить линк на подпись сразу, без использования мыла.
Как я понял это можно сделать используя это: https://www.docusign.co.uk/developer-center/explore/features/embedding-docusign

Проблема возникла в том что бы добавить это к нашему решению.

[quote="Mike V"]DocuSign слушает, в чем именно проблема?[/quote]

Немного выше описано как сейчас у нас все работает.

Задача получить линк на подпись сразу, без использования мыла.
Как я понял это можно сделать используя это: https://www.docusign.co.uk/developer-center/explore/features/embedding-docusign

Проблема возникла в том что бы добавить это к нашему решению.

Вам реально не лень такой код писать?

Вам реально не лень такой код писать?

Ну в целом все Вы правильно понимаете, вот и наверху тут советуют, это embedded signing. Работает предельно просто:
1. Я так понимаю, если вы у вас "ссылка приходит чуваку на почту", значит envelope вы создали, то есть у вас есть envelope id.
2. Надо немножно поменять запрос, которым вы этот envelope создаете, а именно добавить поле clientId к тому signer, которого вы просите подписать.
3. Вызвать вот этот метод v2/accounts/:accountId/envelopes/:envelopeId/views/recipient, параметры должны быть такие (вы все знаете к этому моменту) accountId, envelopeId, authenticationMethod (="email" в Вашем случае), email, returnUrl (если надо), userName (это name signer'а), clientId (который вы назначили в шаге 2).
У нас нету примеров для Apex, но есть для (других языков), сама библиотека open source, просто посмотрите как она собирает REST запросы и сделайте так же.
Если еще вопросы есть или что-то не работает, спрашивайте, поможем.

Ну в целом все Вы правильно понимаете, вот и наверху тут советуют, это embedded signing. Работает предельно просто:
1. Я так понимаю, если вы у вас "ссылка приходит чуваку на почту", значит envelope вы создали, то есть у вас есть envelope id.
2. Надо немножно поменять запрос, которым вы этот envelope создаете, а именно добавить поле clientId к тому signer, которого вы просите подписать.
3. Вызвать вот этот метод v2/accounts/:accountId/envelopes/:envelopeId/views/recipient, параметры должны быть такие (вы все знаете к этому моменту) accountId, envelopeId, authenticationMethod (="email" в Вашем случае), email, returnUrl (если надо), userName (это name signer'а), clientId (который вы назначили в шаге 2).
У нас нету примеров для Apex, но есть для ([url=https://github.com/docusign/devcenter-quickstarts/tree/master/2-EmbeddedSigning]других языков[/url]), сама библиотека open source, просто посмотрите как она собирает REST запросы и сделайте так же.
Если еще вопросы есть или что-то не работает, спрашивайте, поможем.

DevNull
Вот пример кода, где все крайне просто:

DevNull ты аккуратнее с исходниками. А то боюсь устану удалять темы

[quote="DevNull"]Вот пример кода, где все крайне просто:[/quote]
DevNull ты аккуратнее с исходниками. А то боюсь устану удалять темы :D 

Gres
Вам реально не лень такой код писать?

отличная портянка! Наверное скопирована из REST клиента или из примеров и просто заменены нужные части на переменные Всяко лучше чем плодить кучу классов

[quote="Gres"]Вам реально не лень такой код писать?[/quote]
отличная портянка! Наверное скопирована из REST клиента или из примеров и просто заменены нужные части на переменные :D Всяко лучше чем плодить кучу классов :D 

Dmitry Shnyrev
DevNull
Вот пример кода, где все крайне просто:

DevNull ты аккуратнее с исходниками. А то боюсь устану удалять темы :D

Ну в курилке то нормально, хотя по мне ближе к "Интеграции со сторонними сервисами".

[quote="Dmitry Shnyrev"][quote="DevNull"]Вот пример кода, где все крайне просто:[/quote]
DevNull ты аккуратнее с исходниками. А то боюсь устану удалять темы :D[/quote]

Ну в курилке то нормально, хотя по мне ближе к "Интеграции со сторонними сервисами".

Dmitry Shnyrev
отличная портянка! Наверное скопирована из REST клиента или из примеров и просто заменены нужные части на переменные Всяко лучше чем плодить кучу классов

Просто я бы это реализовал раза в 2-3 меньше по объему кода, но вы же все так любить быдлокодить. :p

[quote="Dmitry Shnyrev"]отличная портянка! Наверное скопирована из REST клиента или из примеров и просто заменены нужные части на переменные Всяко лучше чем плодить кучу классов [/quote]
Просто я бы это реализовал раза в 2-3 меньше по объему кода, но вы же все так любить быдлокодить. :p

Gres
Вам реально не лень такой код писать?

Я вот удержался от комментария, а ты не смог:)

Для всех кто использует REST сервисы, если лень делать классы ручками можете воспользоваться Вот этим сайтом

[quote="Gres"]Вам реально не лень такой код писать?[/quote]

Я вот удержался от комментария, а ты не смог:) 

Для всех кто использует REST сервисы, если лень делать классы ручками можете воспользоваться [url=https://www.adminbooster.com/tool/json2apex]Вот этим сайтом[/url]

Gres
но вы же все так любить быдлокодить

Грес, ну зачем же так сурово. Вот мне тоже не сильно понравилась организация твоего кода.
https://github.com/SergeyTrusov/sf-apex-rest-api/tree/master/src/classes
Как по мне сильно перебор с абстракциями. Без документации и специальных курсов не обойтись.
Такая простая вещь как получить параметр из запроса и вернуть ответ как-то сильно замудренно выглядит
Вот так и пишутся проекты в которых потом хрен разберешься.
А тут хоть и много хардкода (согласен с решением wilder) зато любой школьник поймет что должно происходить.
KISS :D

[quote="Gres"]но вы же все так любить быдлокодить[/quote]
Грес, ну зачем же так сурово. Вот мне тоже не сильно понравилась организация твоего кода.
https://github.com/SergeyTrusov/sf-apex-rest-api/tree/master/src/classes
Как по мне сильно перебор с абстракциями. Без документации и специальных курсов не обойтись.
Такая простая вещь как получить параметр из запроса и вернуть ответ как-то сильно замудренно выглядит :D
Вот так и пишутся проекты в которых потом хрен разберешься. 
А тут хоть и много хардкода (согласен с решением wilder) зато любой школьник поймет что должно происходить. 
[url=https://en.wikipedia.org/wiki/KISS_principle]KISS[/url] :D

wilder
Я вот удержался от комментария, а ты не смог:)

Я тоже сначала удержался, но потом не смог не написать)
Dmitry Shnyrev
Грес, ну зачем же так сурово.

Я же по-дружески
Dmitry Shnyrev
Как по мне сильно перебор с абстракциями.

Она там всего одна.
Dmitry Shnyrev
Вот мне тоже не сильно понравилась организация твоего кода.

Я не хотел тебя задеть, но, как видимо, задел за живое.
Dmitry Shnyrev
Такая простая вещь как получить параметр из запроса и вернуть ответ как-то сильно замудренно выглядит

Зато гибко, расширяемо и легко модифицируемо
Dmitry Shnyrev
Вот так и пишутся проекты в которых потом хрен разберешься.

Выше пример в 300 строк какой-то минимально функциональности, умнож это на количество фич * количество разработчиков * хотя бы на 3 года работы получишь классы в 50000 строк ну и попробуй в этом разобраться
Dmitry Shnyrev
KISS :D

Мне кажется, ты не совсем правильно понимаешь этот принцип, но не буду тебя огорчать)

</thread>

[quote="wilder"]Я вот удержался от комментария, а ты не смог:) [/quote]
Я тоже сначала удержался, но потом не смог не написать)
[quote="Dmitry Shnyrev"]Грес, ну зачем же так сурово.[/quote]
Я же по-дружески
[quote="Dmitry Shnyrev"]Как по мне сильно перебор с абстракциями. [/quote]
Она там всего одна.
[quote="Dmitry Shnyrev"]Вот мне тоже не сильно понравилась организация твоего кода. [/quote]
Я не хотел тебя задеть, но, как видимо, задел за живое.
[quote="Dmitry Shnyrev"]Такая простая вещь как получить параметр из запроса и вернуть ответ как-то сильно замудренно выглядит [/quote]
Зато гибко, расширяемо и легко модифицируемо
[quote="Dmitry Shnyrev"]Вот так и пишутся проекты в которых потом хрен разберешься. [/quote]
Выше пример в 300 строк какой-то минимально функциональности, умнож это на количество фич * количество разработчиков * хотя бы на 3 года работы получишь классы в 50000 строк ну и попробуй в этом разобраться
[quote="Dmitry Shnyrev"]KISS :D[/quote]
Мне кажется, ты не совсем правильно понимаешь этот принцип, но не буду тебя огорчать)

</thread>

Ну вы ж меня знаете! Я люблю подискутировать, особенно на злободневные темы!
Я против абстракций потому что они зло! Вариантов их реализации море и каждого программиста свои предпочтения. Вот и получается что начинается за здравие а заканчивается за упокой (проекта).
Вот ты использовал какой-то паттерн проектирования - наплодил кучу зависимых классов и уверен что твой код идеален. А придет на проект такой как к я который нихера не шарит в абстрациях и начнет вносить изменения в первый попавщийся на глаза класс. Сделает кучу костылей, сломает всю твою красоту чтобы заработала одна маленькая фича где-так там далеко от этого класса. Зато отвалятся все фичи которые делал ты. Супер! Я вижу это каждый день!!! Сам пытаюсь подстраиваться под других программистов с их мега расширяемыми решениями и плююсь потом. Вот недавно было - мега расширяемое решение - отправка письма - 8 классов, связанных просто как паутина. Я целый день убил на то чтобы разобраться как эта хрень вообще работает и как внести изменения чтобы не сломать все. В итоге пришлось писать отдельную функцию аля того что выше без всякого гемора и танцев с бубнами. Я каждый раз удивляюсь что они там курят когда все это выдумывают.
По ходу это принципы!
"Расширяемость которая никогда не будет расширяться"
"Не повторяй себя, но сломай код другого"

Ну вы ж меня знаете! Я люблю подискутировать, особенно на злободневные темы! :D
Я против абстракций потому что они зло! Вариантов их реализации море и каждого программиста свои предпочтения. Вот и получается что начинается за здравие а заканчивается за упокой (проекта).
Вот ты использовал какой-то паттерн проектирования - наплодил кучу зависимых классов и уверен что твой код идеален. А придет на проект такой как к я который нихера не шарит в абстрациях и начнет вносить изменения в первый попавщийся на глаза класс. Сделает кучу костылей, сломает всю твою красоту чтобы заработала одна маленькая фича где-так там далеко от этого класса. Зато отвалятся все фичи которые делал ты. Супер! Я вижу это каждый день!!! Сам пытаюсь подстраиваться под других программистов с их мега расширяемыми решениями и плююсь потом. Вот недавно было - мега расширяемое решение - отправка письма - 8 классов, связанных просто как паутина. Я целый день убил на то чтобы разобраться как эта хрень вообще работает и как внести изменения чтобы не сломать все. В итоге пришлось писать отдельную функцию аля того что выше без всякого гемора и танцев с бубнами. Я каждый раз удивляюсь что они там курят когда все это выдумывают. 
По ходу это принципы!
"Расширяемость которая никогда не будет расширяться"
"Не повторяй себя, но сломай код другого"

Сорри друзья! Разбудили во мне опять троля, который не дает мне работать уже 2 часа
Извините если зацепил кого! Gres ;)?
Пошел бабки зарабатывать!

Сорри друзья! Разбудили во мне опять троля, который не дает мне работать уже 2 часа :D 
Извините если зацепил кого! Gres ;)?
Пошел бабки зарабатывать!


Dmitry Shnyrev
Зато отвалятся все фичи которые делал ты.

Друг, тесты тебя спасут)

Dmitry Shnyrev
Извините если зацепил кого! Gres ;)?

Я уже давно знаю о твоем стиле написания кода.

На самом деле у меня аналогичный опыт, т.е. постоянно встречаюсь с людьми, у которых нет желания учиться, которые пишут все в 1 классе в 1 методе и довольны собой, они не думают не о поддержке их кода не о расширяемости. Через год они возвращаются к своему коду и по 2-3 дня не могут разобраться, что нужно сделать, чтобы исправить проблему.

Дима, фломастеры для всех разные, так что спорить тут не о чем.

[quote="Dmitry Shnyrev"]Зато отвалятся все фичи которые делал ты.[/quote]
Друг, тесты тебя спасут)

[quote="Dmitry Shnyrev"]Извините если зацепил кого! Gres ;)? [/quote]
Я уже давно знаю о твоем стиле написания кода.

На самом деле у меня аналогичный опыт, т.е. постоянно встречаюсь с людьми, у которых нет желания учиться, которые пишут все в 1 классе в 1 методе и довольны собой, они не думают не о поддержке их кода не о расширяемости. Через год они возвращаются к своему коду и по 2-3 дня не могут разобраться, что нужно сделать, чтобы исправить проблему.

Дима, фломастеры для всех разные, так что спорить тут не о чем.

Mike V, благодарю.

Mike V, благодарю.
 

DevNull
Mike V, благодарю.

Всегда пожалста, если что не работает, спрашивайте, поможем.

[quote="DevNull"]Mike V, благодарю.[/quote]
Всегда пожалста, если что не работает, спрашивайте, поможем.

Mike V, как можно с тобой связаться, к примеру по скайпу? Есть пару вопросов.

Mike V, как можно с тобой связаться, к примеру по скайпу? Есть пару вопросов. 

Пиши вопросы сюда, мне тоже будет интересно, тоже занимаюсь интеграцией с DocuSign

Пиши вопросы сюда, мне тоже будет интересно, тоже занимаюсь интеграцией с DocuSign

Ок, сформирую отпишу.

Ок, сформирую отпишу. 

Вот у меня назрел вопрос.
Столкнулся с кастомизацией чужой недописанной которая не работает.
Надо починить.
То что есть:
На Docusign_Status__c добавили кастомное поле Lookup на объект Transaction вокруг вертится вся логика.
Т.е. генерируется PDF для записи Transaction который отсылается на Docusign на подпись. После подписи я вижу что создается Docusign Status как и должен но это поле lookup пустое. Но вокруг потом крутится много другой логики. Пытаюсь теперь найти как это поле вообще должно заполняться. По коду не нашел пока, так как с Docusign не сильно знаком, то смею предположить что сам пакет по каким-то настройкам это может сделать.

Если нет. То тогда вопрос. Я перехожу с объекта на Docusign страницу для отправки своего дока. Передается Id - все инфа подтягивается актуальная - тут все ок. Docusign Status уже создается по факту подписи. Как я могу привязать этот Status к моей записи?

Вот у меня назрел вопрос.
Столкнулся с кастомизацией чужой недописанной которая не работает. 
Надо починить.
То что есть:
На Docusign_Status__c добавили кастомное поле Lookup на объект Transaction вокруг вертится вся логика.
Т.е. генерируется PDF для записи Transaction который отсылается на Docusign на подпись. После подписи я вижу что создается Docusign Status как и должен но это поле lookup пустое. Но вокруг потом крутится много другой логики. Пытаюсь теперь найти как это поле вообще должно заполняться. По коду не нашел пока, так как с Docusign не сильно знаком, то смею предположить что сам пакет по каким-то настройкам это может сделать. 

Если нет. То тогда вопрос. Я перехожу с объекта на Docusign страницу для отправки своего дока. Передается Id - все инфа подтягивается актуальная - тут все ок. Docusign Status уже создается по факту подписи. Как я могу привязать этот Status к моей записи? 

Все оказалось СУПЕР просто
https://support.docusign.com/guides/dfs-admin-guide-add-ds-status-to-custom-object

Для разработки я использовал свой тестовый акк на Docusign, поэтому настроек акка с прода у меня естественно не оказалось. Теперь все работает

Все оказалось СУПЕР просто :D 
https://support.docusign.com/guides/dfs-admin-guide-add-ds-status-to-custom-object

Для разработки я использовал свой тестовый акк на Docusign, поэтому настроек акка с прода у меня естественно не оказалось. Теперь все работает :) 

Я так понимаю, проблема решена. Сорри, поздно подошел?

Я так понимаю, проблема решена. Сорри, поздно подошел?

Привет Mike V
Да, разобрался.

Кстати заметил не знаю баг или фича

У меня 2 дев орга и 1 акк тестовый на Docusign.
Интеграция настроена на 1 из них и при работе на втором все отлично отрабатывает, но Docusign Status приходит на первый орг. По ходу проверки нет с какого орга идут запросы?

Привет Mike V :)
Да, разобрался. 

Кстати заметил не знаю баг или фича :)

У меня 2 дев орга и 1 акк тестовый на Docusign.
Интеграция настроена на 1 из них и при работе на втором все отлично отрабатывает, но Docusign Status приходит на первый орг. По ходу проверки нет с какого орга идут запросы?

Там настройка есть на стороне DocuSign c каким Salesforce org работать. Наверное в ней забит неправильный org.

Там настройка есть на стороне DocuSign c каким Salesforce org работать. Наверное в ней забит неправильный org.

Все правильно. Я и говорю что настройка есть и орг вбит неправильный.
Но я бы все-таки предусмотрел защиту от дурака (типа как от меня в данный момент ) что если запрос приходит с одного орга, то не надо ответ посылать на другой орг. В принципе реализация плевая - проверять орг id. Как я понял настройка интеграции происходит автоматически и инициируется со стороны SF. Можно в этот момент кроме кредов еще записывать org id и принимать запросы только с него.

Дайте немного поумничать

Все правильно. Я и говорю что настройка есть и орг вбит неправильный.
Но я бы все-таки предусмотрел защиту от дурака (типа как от меня в данный момент :) ) что если запрос приходит с одного орга, то не надо ответ посылать на другой орг. В принципе реализация плевая - проверять орг id. Как я понял настройка интеграции происходит автоматически и инициируется со стороны SF. Можно в этот момент кроме кредов еще записывать org id и принимать запросы только с него.

:D Дайте немного поумничать :D 

Да, мысль интересная, надо подкинуть нашим PMам.

Да, мысль интересная, надо подкинуть нашим PMам. 

Mike V,
Все вожусь с embedding-docusign.
Глянул примеры на других языках.
Все равно не догоняю(.
Если посмотреть на код который я давал в начале темы(и да, он до сих пор в таком виде:)) то понятно что мы отправляем на docusign тупо название полей с данными, данные авторизации и template ID. Сервис мапит поля по названию, вставляет в шаблон и отправляет письмо на почту с ссылкой на подпись. Задача стоит модернизировать запрос, что бы он не отправлял письмо, а сразу дал ссылку на подпись.
Так что надо добавить в данный запрос? Или все таки надо переделывать полностью(soap там и т.д)?

Mike V, 
Все вожусь с embedding-docusign.
Глянул примеры на других языках. 
Все равно не догоняю(.
Если посмотреть на код который я давал в начале темы(и да, он до сих пор в таком виде:)) то понятно что мы отправляем на docusign тупо название полей с данными, данные авторизации и template ID. Сервис мапит поля по названию, вставляет в шаблон и отправляет письмо на почту с ссылкой на подпись. Задача стоит модернизировать запрос, что бы он не отправлял письмо, а сразу дал ссылку на подпись.  
Так что надо добавить в данный запрос? Или все таки надо переделывать полностью(soap там и т.д)? 

Не очень понял вопрос, если честно. Вы создаете DocuSign Envelope, а затем надо получить ссылку по которой его можно подписать. Это в любом случае 2 вызова.
Создать как-то: так
Получить url для подписи как-то : так
Если есть еще вопросы, обращайтесь.

Не очень понял вопрос, если честно. Вы создаете DocuSign Envelope, а затем надо получить ссылку по которой его можно подписать. Это в любом случае 2 вызова. 
Создать как-то: [url=https://www.docusign.com/developer-center/recipes/request-a-signature-via-email]так[/url]
Получить url для подписи как-то : [url=https://www.docusign.com/developer-center/recipes/signing-from-your-app]так[/url]
Если есть еще вопросы, обращайтесь.

Большое спасибо. Разобрались.

Большое спасибо. Разобрались. 

Mike V, подскажи плиз, а на Docusign можно как-то зарегать акк для dev целей, чтобы не триальный был (бессрочный). А то я вроде нашел как триальный регать но он экспайрится. Не хочется через каждый месяц регать новый.

Mike V, подскажи плиз, а на Docusign можно как-то зарегать акк для dev целей, чтобы не триальный был (бессрочный). А то я вроде нашел как триальный регать но он экспайрится. Не хочется через каждый месяц регать новый.

Есть Developer account, он не должен expire. Вот ссылка. Вот тут подробно описано в чем разница. Но по сути DocuSign Developer Account это Salesforce Development org. Почти все фичи включены (кроме sms аутентикации и еще чето-то хитрого), но Developer Account это только для разработки (легальной силы подписанные документы не имеют).

Есть Developer account, он не должен expire. Вот [url=https://secure.docusign.com/signup/develop]ссылка[/url]. Вот [url=https://support.docusign.com/en/articles/What-are-my-options-for-a-DocuSign-Trial-account]тут[/url] подробно описано в чем разница. Но по сути DocuSign Developer Account это Salesforce Development org. Почти все фичи включены (кроме sms аутентикации и еще чето-то хитрого), но Developer Account это только для разработки (легальной силы подписанные документы не имеют).

Mike спасибо! Выручил!

Mike спасибо! Выручил!

Mike, помоги еще с одним моментом.
Есть ли возможность возвращаться на кастомную страницу (какой нибудь retUrl) после того как docusign отработает отправку документа. Сейчас пользователя редиректит на стандартную страницу объекта.

Mike, помоги еще с одним моментом.
Есть ли возможность возвращаться на кастомную страницу (какой нибудь retUrl) после того как docusign отработает отправку документа. Сейчас пользователя редиректит на стандартную страницу объекта. 

Я так понимаю речь про посылку документа на подпись (ну это когда нужно drag'n'drop поле подписи, инициалы и т.п.). Это описано тут.
Вкратце так, надо в запрос POST /accounts/{accountId}/envelopes/{envelopeId}/views/sender включить тело

{
"returnUrl": "https://www.docusign.com/devcenter"
}
.
Если нужно редиректить после того, как подписали, то тоже можно, в сслылке описано как.

Я так понимаю речь про посылку документа на подпись (ну это когда нужно drag'n'drop поле подписи, инициалы и т.п.). Это описано [url=https://www.docusign.com/developer-center/explore/features/embedding-docusign]тут[/url].
Вкратце так, надо в запрос [b]POST /accounts/{accountId}/envelopes/{envelopeId}/views/sender[/b] включить тело
[code]{
    "returnUrl": "https://www.docusign.com/devcenter"
}
[/code].
Если нужно редиректить [b]после[/b] того, как подписали, то тоже можно, в сслылке описано как. 

Всем привет,

Mike, расскажи плис есть ли решение для более частного случая применения returnUrl. А именно для страницы dsfs__DocuSign_CreateEnvelope на стороне SalesForce.

Мы вызываем эту страницу из нашей кастомной страницы. И, после отсылки документов на подпись, нам нужно в эту же кастомную страницу вернуться

Всем привет,

Mike, расскажи плис есть ли решение для более частного случая применения returnUrl. А именно для страницы dsfs__DocuSign_CreateEnvelope на стороне SalesForce.

Мы вызываем эту страницу из нашей кастомной страницы. И, после отсылки документов на подпись, нам нужно в эту же кастомную страницу вернуться

Denis
Всем привет,

Mike, расскажи плис есть ли решение для более частного случая применения returnUrl. А именно для страницы dsfs__DocuSign_CreateEnvelope на стороне SalesForce.

Мы вызываем эту страницу из нашей кастомной страницы. И, после отсылки документов на подпись, нам нужно в эту же кастомную страницу вернуться

Увы, к сожалению такой возможности нет. С этой страницы всегда возвращаются на той Salesforce объект, с которого все начиналось. Если только plugin для браузера написать :)

[quote="Denis"]Всем привет,

Mike, расскажи плис есть ли решение для более частного случая применения returnUrl. А именно для страницы dsfs__DocuSign_CreateEnvelope на стороне SalesForce.

Мы вызываем эту страницу из нашей кастомной страницы. И, после отсылки документов на подпись, нам нужно в эту же кастомную страницу вернуться[/quote]

Увы, к сожалению такой возможности нет. С этой страницы всегда возвращаются на той Salesforce объект, с которого все начиналось. Если только plugin для браузера написать :)

Может мы неправильно используем эту страницу?
Этот способ придумали до прихода нашей команды на проект и ему уже много лет.

Может есть более изящный способ?

Есть кастомная страница и кастомный объект. На странице есть кнопка Send PDF. По ее нажатию и происходит вся магия со страницей dsfs__DocuSign_CreateEnvelope - формируется урл с Id записи к которой приатачивается PDF (а также еще куча других параметров, толком не уверен в их значении). Собственно после этого как на вашей странице отправляется документ надо вернуться обратно.

Может мы неправильно используем эту страницу?
Этот способ придумали до прихода нашей команды на проект и ему уже много лет.

Может есть более изящный способ?

Есть кастомная страница и кастомный объект. На странице есть кнопка Send PDF. По ее нажатию и происходит вся магия со страницей dsfs__DocuSign_CreateEnvelope - формируется урл с Id записи к которой приатачивается PDF (а также еще куча других параметров, толком не уверен в их значении). Собственно после этого как на вашей странице отправляется документ надо вернуться обратно.


Мне кажется это распространенный use case

Мне кажется это распространенный use case

Как одно из "ленивых" решений можно написать Route VFP для Detail View Source Object. Т.е. при возвращении из Create Envelope на detail view будет происходить редирект на кастомную страницу. Это решение приемлемо если это самое detail view никому кроме админов и разработчиков не нужно.

Если посмотреть более радикально на этот вопрос то можно воспользоваться вебсервисом (детальное описание как можно найти здесь https://salesforceradical.blogspot.com/2016/04/docusign-salesforce-integration.html). В этом случаи документ будет отправляться сразу, т.е. мы никуда не будем уходить с нашей кастомной странички

Как одно из "ленивых" решений можно написать Route VFP для Detail View Source Object. Т.е. при возвращении из Create Envelope на detail view будет происходить редирект на кастомную страницу. Это решение приемлемо если это самое detail view никому кроме админов и разработчиков не нужно.

Если посмотреть более радикально на этот вопрос то можно воспользоваться вебсервисом (детальное описание как можно найти здесь https://salesforceradical.blogspot.com/2016/04/docusign-salesforce-integration.html). В этом случаи документ будет отправляться сразу, т.е. мы никуда не будем уходить с нашей кастомной странички

Denis
В этом случаи документ будет отправляться сразу, т.е. мы никуда не будем уходить с нашей кастомной странички

А как пользователь сможет "оформить" документ - расставить маркеры на подпись. Если это не нужно, то конечно смысла в редиректе нет особого.

[quote="Denis"]В этом случаи документ будет отправляться сразу, т.е. мы никуда не будем уходить с нашей кастомной странички[/quote]
А как пользователь сможет "оформить" документ - расставить маркеры на подпись. Если это не нужно, то конечно смысла в редиректе нет особого.