Добрый день, форумчане)
Всегда был интересен вопрос след. характера:
В чём отличие типа данных у параметра БП таких как Уникальный идентификатор и Справочник?
Может в Справочник можно как-то внутрь заглянуть и вытянуть 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.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать