HTML-клиент Lightswitch — установка значения модального средства выбора при создании экрана

Сейчас я провел довольно много исследований по этому вопросу, и ни один из примеров не является полезным или применимым. Что я пытаюсь сделать, так это то, что когда пользователь загружает экран «Добавить», я хочу, чтобы средство выбора сведений отображало имя при создании экрана, а не выбирало его каждый раз. Я уверен, что это можно сделать, но мне не хватает навыков javascript.

спасибо за любую помощь, и ниже приведен пример:

введите здесь описание изображения

это имя хранится в таблице, и его можно найти в этом модальном средстве выбора/средстве выбора сведений, но, как вы можете себе представить, если это значение требуется в 50% случаев, то добавление его вручную не только отнимает много времени, но и становится немного утомительным.

текстовым полем можно управлять с помощью contentItem.value или element.innerText после нажатия post render для каждого элемента, но это не работает с этим типом управления, и я получаю следующую ошибку: введите здесь описание изображения

вот некоторая полезная информация, которая может помочь:

  • ProjectData (источник данных)
  • Ссылки на главный экран OrderRequest
  • Ссылка внешнего ключа ссылается на ShippingContact, а CustomerName ищется в DetailsPicker.

основываясь на приведенном ниже ответе, мне нужно что-то заменить в верхней функции, а затем создать основу для второй части кода, где вы написали defaultLookup(screen.Customer, "Contact", "Contacts",, что здесь нужно?

пример того, что я пытаюсь изменить, и, к сожалению, это не работает

var defaultValue = "Test User";
    var filter = "(ContactName eq " + msls._toODataString(defaultValue, ":String") + ")";
    defaultLookup(screen.OrderRequest, "ContactName", "ShippingContacts", { filter: filter });

person Crezzer7    schedule 16.02.2015    source источник


Ответы (1)


Имея такое же требование, мы реализовали следующую вспомогательную функцию: -

function defaultLookup (entity, destinationPropertyName, sourceCollectionName, options) {
    /// <summary>
    /// Defaults an entity's lookup property
    /// </summary>
    /// <param name="entity" type="Object">The entity featuring the lookup property to default</param>
    /// <param name="destinationPropertyName" type="String">The lookup property against the entity to default</param>
    /// <param name="sourceCollectionName" type="String">The collection from which to source the lookup value</param>
    /// <param name="options" type="PlainObject" optional="true">
    /// A set of key/value pairs used to select additional configuration options. All options are optional.
    /// <br/>- String filter: If supplied, defines the match condition for the required default, otherwise the lookup defaults to the first entry in the source collection
    /// </param>
    options = options || {}; // Force options to be an object
    var source = myapp.activeDataWorkspace.ApplicationData[sourceCollectionName]; // DataServiceQuery
    var query = {}; //DataServiceQuery
    if (options.filter) {
        query = source.filter(options.filter);
    } else {
        query = source.top(1);
    }
    query.execute().then(function (result) {
        entity[destinationPropertyName] = result.results[0];
    });
};

В вашем случае вам потребуется изменить ApplicationData на ProjectData.

Это можно вызвать в событии created вашего экрана следующим образом: -

myapp.AddEditCustomer.created = function (screen) {
    var defaultValue = "Chris Cook";
    var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
    defaultLookup(screen.Customer, "Contact", "Contacts", { filter: filter });
};

В вашем случае screen.Customer следует изменить на screen.OrderRequest, «Contact» следует изменить на «CustomerName», а «Contacts» — на «ShippingContacts». Кроме того, исходя из того, что в вашей таблице поиска есть поле с именем ContactName, строка фильтра должна ссылаться на ContactName, а не просто на имя.

Кроме того, этот помощник может быть вызван из событий, созданных вашей сущностью (в разделе сценария UserCode), следующим образом:

myapp.Customer.created = function (entity) {
    var defaultValue = "Chris Cook";
    var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
    defaultLookup(entity, "Contact", "Contacts", { filter: filter });
};

В моем примере кода основная таблица называется «Клиенты», а таблица поиска — «Контакты». Поле «Контакт» в основной таблице ссылается на запись в таблице «Контакты». В таблице "Контакты" есть поле "Имя" и запись с именем, для которого задано значение "Крис Кук" (переменные defaultValue и filter относятся к этой ситуации).

На следующем изображении показано отлаживаемое свойство screen.Customer:

введите здесь описание изображения

person Chris Cook    schedule 09.03.2015
comment
я попробую реализовать это сейчас, спасибо за ответ - person Crezzer7; 09.03.2015
comment
Мне нужна помощь в применении вашего метода, когда вы в следующий раз активируете, я добавил некоторую дополнительную информацию выше, поэтому, надеюсь, я смогу заставить это работать и принять ваш ответ :) - person Crezzer7; 09.03.2015
comment
Нет проблем - я постараюсь предоставить дополнительную информацию в своем предыдущем посте. - person Chris Cook; 09.03.2015
comment
Контакт, Контакты остаются прежними? или это должно ссылаться на имя в таблице (ShippingContacts), которое является ContactName - person Crezzer7; 09.03.2015
comment
Извините, я обновлял поэтапно, чтобы продолжать ссылаться на ваш первый пост. Я добавил дополнительные детали. Кроме того, просто чтобы проверить, какое поле в таблице поиска вы будете проверять на совпадение со значением по умолчанию? - person Chris Cook; 09.03.2015
comment
спасибо, хотя теперь у меня проблема с фильтром, который является нулевой ссылкой, я сейчас работаю над этим, спасибо за дополнительную информацию, это очень помогло. и что касается вашего комментария выше здесь, по полю в таблице поиска, я полагаю, вы имеете в виду, что мне нужно проверить, что имя столбца на самом деле является ContactName в ShippingContact? - person Crezzer7; 09.03.2015
comment
Если поле в таблице ShippingContact называется ContactName, то строка фильтра должна выглядеть следующим образом: - var filter = (ContactName eq + msls._toODataString(defaultValue, :String) + ); - person Chris Cook; 09.03.2015
comment
Давайте продолжим обсуждение в чате. - person Crezzer7; 09.03.2015