Поиск по этому блогу

среда, 9 марта 2016 г.

DocsVision 4,5 - Изменяем значение в справочнике сотрудников

На этот раз задача посложнее.
Нужно в DocsVision изменить значение в справочнике сотрудников в секции сотрудник.
Менять буду по принципу, если значение не равно нужному мне, то меняем.
Меня интересует поле - Тип маршрутизации - RoutingType.
В DocsVision есть простой способ для подобных действий. Это механизм FindRows. Он принимает xml запрос, по которому ищет соответствия. Им и буду пользоваться.\
P.S.  Запрос можно усложнять, делая выборку по нескольким условиям.




using System;
using System.Xml;

// подключение библиотек СУБП
using DocsVision.Platform.ObjectManager;
using DocsVision.Workflow.Objects;
using DocsVision.Workflow.Runtime;
using DocsVision.Workflow.Gates;
using DocsVision.Platform.HelperAPI;

using ProcessInfo = DocsVision.Workflow.Runtime.ProcessInfo;

namespace DVScriptHost
{
    class DVScript
    {
        public void Execute(ProcessInfo process, PassState passInfo)
        {
            try
            {
                const string cStaffType = "6710B92A-E148-4363-8A6F-1AA0EB18936C";//Справочник сотрудников
                const string cEmployeers = "DBC8AE9D-C1D2-4D5E-978B-339D22B32482";//Секция сотрудники

                ProcessVariable oCard = process.GetVariableByName("Карточка");

                DVGate gate = (DVGate)process.Gates[DVGate.GateID];
                UserSession session = gate.Session;

                CardData StaffCatalog = session.CardManager.get_DictionaryData(cStaffType);
                SectionData dataEmployees = StaffCatalog.Sections[cEmployeers];

                SectionQuery query = new SectionQuery();
                Condition condition = query.ConditionGroup.Conditions.AddNew("RoutingType", FieldTypeEnum.FIELD_ENUM,
                            ConditionOperationEnum.CONDITION_OPERATION_NOTEQUALS,
                            "3");
                process.LogMessage(query.GetText(true, null));
                RowDataCollection result = dataEmployees.FindRows(query.GetText(true, null));
                process.LogMessage("result Count" + result.Count);

                for (int i = 0; i < result.Count; i++)
                {
                    //process.LogMessage("result[i].ID " + result[i].ID);
                    DVPrincipal abc = (DVPrincipal)gate.GetVariable((long)DVVariableType.PRINCIPAL, result[i].ID);
                    abc.RoutingType = 3;
                    // process.LogMessage("abc RoutingType " + abc.RoutingType);
                    // process.LogMessage("abc FirstName " + abc.FirstName);
                    // process.LogMessage("abc LastName " + abc.LastName);
                    /*if(abc.RoutingType != 3)
                    {
                        process.LogMessage("----->>>>>>abc RoutingType " + abc.RoutingType + " != 3");
                    }*/
                }
                condition = query.ConditionGroup.Conditions.AddNew("RoutingType", FieldTypeEnum.FIELD_ENUM,
                            ConditionOperationEnum.CONDITION_OPERATION_NOTEQUALS,
                            "3");
                RowDataCollection result = dataEmployees.FindRows(query.GetText(true, null));
                process.LogMessage("result Count" + result.Count);
            }
            catch (Exception ex)
            {
                // запись в журнал ошибки исполнения
                process.LogMessage("Ошибка выполнения скрипта:" + ex.ToString());
            }
            return;
        }
    }
}

Комментариев нет:

Отправить комментарий