Добрый день, форумчане)
Всегда был интересен вопрос след. характера:
В чём отличие типа данных у параметра БП таких как Уникальный идентификатор и Справочник?
Может в Справочник можно как-то внутрь заглянуть и вытянуть displayValue, избегая запрос к root таблице?
Сталкивался кто с подобным, интересен опыт Ваш.
Нравится
1 комментарий
14 августа 2019 12:08
Если создать два параметра разных типов и привязать к одной и той же записи одного справочника, в исходном коде БП будет выглядеть так:
_processSchemaParameter1 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); }; _processSchemaParameter2 = () => { return (Guid)(new Guid("b06f1e0e-f46b-1410-7190-00155d043204")); }; ... private Func<Guid> _processSchemaParameter1; public virtual Guid ProcessSchemaParameter1 { get { return (_processSchemaParameter1 ?? (_processSchemaParameter1 = () => Guid.Empty)).Invoke(); } set { _processSchemaParameter1 = () => { return value; }; } } private Func<Guid> _processSchemaParameter2; public virtual Guid ProcessSchemaParameter2 { get { return (_processSchemaParameter2 ?? (_processSchemaParameter2 = () => Guid.Empty)).Invoke(); } set { _processSchemaParameter2 = () => { return value; }; } } ... private void WritePropertyValues(DataWriter writer, bool useAllValueSources) { if (!HasMapping("ProcessSchemaParameter1")) { writer.WriteValue("ProcessSchemaParameter1", ProcessSchemaParameter1, Guid.Empty); } if (!HasMapping("ProcessSchemaParameter2")) { writer.WriteValue("ProcessSchemaParameter2", ProcessSchemaParameter2, Guid.Empty); } } ... protected override void InitializeMetaPathParameterValues() { base.InitializeMetaPathParameterValues(); MetaPathParameterValues.Add("e0873088-8334-4b85-96a4-fa3e5ecb7374", () => ProcessSchemaParameter1); MetaPathParameterValues.Add("246467c7-071b-4cb0-8073-30c4f72be120", () => ProcessSchemaParameter2); ... protected override void ApplyPropertiesDataValues(DataReader reader) { base.ApplyPropertiesDataValues(reader); bool hasValueToRead = reader.HasValue(); switch (reader.CurrentName) { case "ProcessSchemaParameter1": if (!hasValueToRead) break; ProcessSchemaParameter1 = reader.GetValue<System.Guid>(); break; case "ProcessSchemaParameter2": if (!hasValueToRead) break; ProcessSchemaParameter2 = reader.GetValue<System.Guid>(); break; } } ...
А в метаданных:
"Parameters": [ { "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter", "UId": "e0873088-8334-4b85-96a4-fa3e5ecb7374", "Name": "ProcessSchemaParameter1", "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395", "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395", "DataValueType": "b295071f-7ea9-4e62-8d1a-919bf3732ff2", "SourceValue": { "Source": 3, "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]", "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395" }, "ReferenceSchemaUId": "c449d832-a4cc-4b01-b9d5-8a12c42a9f89" }, { "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter", "UId": "246467c7-071b-4cb0-8073-30c4f72be120", "Name": "ProcessSchemaParameter2", "CreatedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395", "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395", "DataValueType": "23018567-a13c-4320-8687-fd6f9e3699bd", "SourceValue": { "Source": 3, "Value": "[#Lookup.c449d832-a4cc-4b01-b9d5-8a12c42a9f89.b06f1e0e-f46b-1410-7190-00155d043204#]", "ModifiedInSchemaUId": "f4c123c0-d628-4d9f-867c-6c0b78c86395" } } ],
То есть разницы практически нет, хотя внешний вид и интерфейс выбора значения разные.
Также на значения параметров в выполняющемся процессе можно посмотреть запросом в базу:
select top 10 *, cast(PropertiesData as varchar(max)) from SysProcessData
Там для параметров видно тоже только Id.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать