Важно помнить о следующей структурной особенности состояний: они различны у каждого вида карточки, поэтому сначала надо получать текущий вид карточки, а затем выбирать соответствующее ему состояние.
// подключение системных библиотек
using System;
using System.Xml;
// подключение библиотек СУБП
using DocsVision.Workflow.Objects;
using DocsVision.Workflow.Runtime;
using DocsVision.Workflow.Gates;
using DocsVision.Platform.HelperAPI;
using DocsVision.Platform.ObjectManager;
namespace DVScriptHost
{
class DVScript
{
// стандартная функция, которая будет вызвана подсистемой СУБП
//
// входные параметры функции:
//
// process - информация о процессе. содержит коллекции
// Gates - коллекция шлюзов процесса
// Variables - коллекция переменных процесса
// passInfo - информация о текущем проходе
//
private string state = "Согласование с контрагентом"; //Название состояния, в которое мы хотим перевести карточку
private DVGate m_DVGate;
public void Execute (DocsVision.Workflow.Runtime.ProcessInfo process, PassState passInfo)
{
try
{
//Получаем ссылку на карточку, у которой надо сменить состояние. В данном случае она хранится в переменной процесса, которая называется "Инициирующий договор"
ProcessVariable pvCard = process.GetVariableByName("Инициирующий договор");
DVCard dvCard = (DVCard)pvCard.Value;
//получаем шлюз
m_DVGate = (DVGate)process.Gates[DVGate.GateID];
// получаем сессию
UserSession oSes = m_DVGate.Session;
//Получаем данные карточки
CardData card = oSes.CardManager.get_CardData(dvCard.ID);
//Получаем ссылку на секцию "Основная информация". Так как карточка стандартная, то гуид берем из справочника в предыдущем посте. В противном случае - из DVExplorer.
SectionData mainInfo = card.Sections["8C77892A-21CC-4972-AD71-A9919BCA8187"];
//Получаем ссылку на справочник типов. Гуид берем из справочника в предыдущем посте.
CardData RefTypes = oSes.CardManager.get_DictionaryData("BE14D55D-92B7-4345-AD10-32588981F83D");
//Получаем тип карточки из справочника типов
RowData currentType = RefTypes.Sections["49AD5A2D-17EC-46E2-A49E-C58D0BBD9C1A"].Rows[mainInfo.FirstRow.get_Value("Type")];
//Устанавливаем состояние карточки, найдя его по имени и в соответствии с типом карточки
mainInfo.FirstRow.set_Value("DocState", currentType.ChildRows.GetItemByValue("Name", state).ID);
}
catch (Exception ex)
{
// запись в журнал ошибки исполнения
process.LogMessage("Ошибка выполнения скрипта:" + ex.Message);
}
return;
}
}
}