Как создать пользовательское поле гиперссылки

У меня есть пользовательское поле, в котором отображается ARRegister.RefNbr. Это пользовательское поле содержится в сетке APTran. Пользователь фактически создает счет-фактуру AR с настраиваемым действием, и новый номер документа AR сохраняется в сетке APTran. Я хочу создать поле пользователя как гиперссылку (аналогично справочному номеру товарно-материальной квитанции на вкладке заказа на отгрузку SO). Стоит ли использовать элемент управления PXSelector? Каковы правильные атрибуты? Цель состоит в том, чтобы открыть экран счета-фактуры AR, когда пользователь нажимает на поле пользователя.


person Chris H    schedule 15.10.2014    source источник


Ответы (2)


Существует общий подход, который позволяет добавлять ссылки в ячейки сетки и не основан на селекторах или чем-либо еще. Для его реализации необходимо проделать следующие шаги:

1. Определите действие на вашем графике, которое обрабатывает перенаправления. Что-то вроде этого:

public PXAction<YourMainDAC> ViewInvoice;

[PXButton]
protected virtual void viewInvoice()
{
    ARTran row = Transactions.Current;
    string docType = //get Doc Type from the tran record
    string refNbr = //get Ref Nbr from the tran record
    ARInvoice invoice = PXSelect<ARInvoice, 
        Where<ARInvoice.docType, Equal<Required<ARInvoice.docType>>,
          And<ARInvoice.refNbr, Equal<Required<ARInvoice.refNbr>>>>>
            .Select(this, row.YourDocTypeField, row.YourRefNbrField);

    // Create the instance of the destination graph
    ARInvoiceEntry graph = PXGraph.CreateInstance<ARInvoiceEntry>();
    graph.Document.Current = invoice;

    // If the invoice is found, throw an exception to open
    // a new window (tab) in the browser
    if (graph.Document.Current != null)
    {
        throw new PXRedirectRequiredException(graph, true, "AR Invoice");
    }
}

2. В определении страницы .aspx добавьте команду обратного вызова, соответствующую новому действию (замените grid идентификатором сетки ARTrans на вашей странице):

<px:PXDataSource ID="ds" ... >
    <CallbackCommands>
        <px:PXDSCallbackCommand Name="ViewInvoice"
            Visible="False"
            DependOnGrid="grid">
        </px:PXDSCallbackCommand>
    </CallbackCommands>
</px:PXDataSource>

3. В столбце сетки, куда вы хотите добавить ссылку, укажите команду ссылки, указывающую на указанное выше PXDSCallbackCommand:

<px:PXGridColumn DataField="InvoiceNbrOrSomething"
                 LinkCommand="ViewInvoice">
</px:PXGridColumn>

Это немного длинный способ определения ссылки, но, во-первых, он не накладывает никаких ограничений на поле, в которое вы добавляете ссылку, а также дает вам полный контроль над тем, какой график открывать и что там показывать.

Примечание: вам также может потребоваться установить SyncPosition="true" в элементе управления сеткой в ​​файле aspx.

Пример адаптирован из Примера 3.4 в учебном руководстве Acumatica T200. Вы можете проверить это, чтобы получить подробные объяснения и дополнительную информацию.

person Alex Turok    schedule 18.10.2014

Если у вас есть селектор, связанный со стандартной таблицей Acumatica, например добавление настраиваемого поля, содержащего селектор для InventoryItem или ARInvoice, вы можете установить AllowEdit = True в своем поле на странице, содержащей ваше настраиваемое поле. Это автоматически добавит гиперссылку. Если ваше поле не содержит селектора, он не будет работать, если только он не настроен для сегментов.

У нас есть настраиваемые таблицы, которые мы добавили в наш проект, где нам нужны гиперссылки. Пока вы добавляете атрибут PXPrimaryGraph в свой ЦАП, вы должны иметь возможность делать то же самое для полной настраиваемой страницы / ЦАП.

Мы начали с использования LinkCommand, но подход AllowEdit сохраняет код простым без необходимости настраивать логику для поддержки ссылки. Более сложная логика, чем переход к первичному графу полей, потребует команды link.

person Brendan    schedule 09.12.2015
comment
PXPrimaryGraph: help.acumatica.com/ - person Deetz; 22.12.2020
comment
Если свойство AllowEdit недоступно в вашем селекторе, попробуйте следующее: stackoverflow.com/a/65415461/3718361 - person Deetz; 22.12.2020