2016-05-16 4 views
2

У меня есть запись экрана для хранения данных транзакций, я хочу использовать динамическим с MULTISELECT комбобокса выбрать статус и данные состояний взяты из таблицы, но когда некоторые из состояния данных выбран , количество сохраненных данных делает не соответствует, который был выбран,Acumatica Dynamic MultiSelect Dropdown

Screen Entry Screenshoot

Database Screenshoot

у меня т ried следующий код, но это не работает для меня.

public class StatusMultiStringListAttribute : PXStringListAttribute 
{ 
    public StatusMultiStringListAttribute() : base() 
    { 
     PXResultset<StatusTable> rslt = PXSelect<StatusTable>.Select(new PXGraph()); 
     List<string> values = new List<string>(); 
     List<string> labels = new List<string>(); 
     foreach (PXResult<StatusTable> item in rslt) 
     { 
      BSMTStatus e = (StatusTable)item; 
      values.Add(e.StatusID); 
      labels.Add(e.Description); 
     } 

     this._AllowedValues = values.ToArray(); 
     this._AllowedLabels = labels.ToArray(); 
     MultiSelect = true; 
    } 
} 

есть ли какое-либо другое решение, извините, мой английский плохой, спасибо.

+0

могли бы вы предоставить точный набор атрибутов для целевой области (состояния)? Я подозреваю, что поле недостаточно велико, чтобы разместить все валу. Я также замечаю, что значения в вашем поле включают дополнительные пробелы в конце. – Gabriel

ответ

1

Я заметил ваш комментарий на http://asiablog.acumatica.com/2016/03/multiselect-combo-box.html и увидел, что вы отправили дополнительный код. Основываясь на вашем примере кода, я определил две проблемы:

Прежде всего, значения, которые вы загружаете с ЦАП StatusTable, содержат конечные пробелы, которые не обрезаны. Вы не представили декларацию DAC StatusTable, но с вашего скриншота можно с уверенностью предположить, что это поле имеет атрибут IsFixed, установленный на true. С этими настройками система добавит пробел в конце вашего значения. Для экономии места в целевой области, я бы рекомендовал добавить дифферента() в коде конструктора:

foreach (PXResult<StatusTable> item in rslt) 
{ 
    BSMTStatus e = (StatusTable)item; 
    values.Add(e.StatusID.Trim()); //Remove any white-space 
    labels.Add(e.Description); 
} 

Во-вторых, поле состояния, где вы хранящий выбранные значения не является достаточно долго, чтобы вместить несколько выбранных , В настоящее время он определяется как 20 символов ([PXDBString(20, IsFixed=true)]), и даже если вы удалите пробелы, вы все равно будете ограничены 4 вариантами. Я предлагаю вам изменить его до 255, а также удалить IsFixed=true, так как это не требуется для этого поля:

[PXDBString(255)] 
[PXDefault] 
[PXUIField(DisplayName = "Status")] 
[StatusStringList] 
public virtual string Status 
+0

спасибо за ваш совет, моя проблема решена. – Distor4by

+0

@ Distor4by круто, спасибо за обновление! – Gabriel