Добавить кнопку на верхнюю панель инструментов на экране «Дело»

Я пытаюсь добавить новую кнопку панели инструментов рядом с «ВЗЯТЬ ДЕЛО» на экране «Дело» (CR306000). Я настроил CRCaseMaint DAC, но кнопка все равно не появляется. Может ли кто-нибудь предложить.


person Krunal    schedule 05.05.2015    source источник
comment
Можете ли вы поделиться кодом, который вы добавили?   -  person Gabriel    schedule 05.05.2015


Ответы (3)


воспроизвел это, и проблема и решение заключались в том, что PXAction должен быть общедоступным. В примере выше он помечен как частный.

код работает следующим образом:

public class CaseExtension : PXGraphExtension<CRCaseMaint>
{
    public PXAction<CRCase> Change2;

    [PXButton(CommitChanges=true)]
    [PXUIField(DisplayName="Change Me")]
    protected virtual void change2()
    {

    }
}
person Ali    schedule 07.05.2015
comment
Спасибо Али за помощь. - person Krunal; 12.05.2015

Вот еще одна причина. В базовом графе есть код

public PXAction<CRCase> takeCase;
        [PXUIField(DisplayName = "Take Case", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
        [PXButton]
        public virtual IEnumerable TakeCase(PXAdapter adapter)

У самой Acumatica есть кнопка TakeCase, которая блокирует вашу кнопку TakeCase. Вам нужно понять, зачем вам нужна еще одна кнопка Take Case, потому что команда Acumatica уже внедрила ее. Вы уверены, что хотите заменить его?

person Yuriy Zaletskyy    schedule 05.05.2015
comment
Нет, я не хочу заменять существующую кнопку. Я хочу создать одну новую кнопку CreateCase, через которую я хочу отправить кейс на другой сайт. - person Krunal; 05.05.2015
comment
Затем вы можете использовать TakeCase2, который находится в измененном первом ответе. - person Yuriy Zaletskyy; 05.05.2015

Вам потребуются следующие шаги:
1. Создайте библиотеку классов (CL).
2. Ссылка на созданные CL dll из папки Acumatica, которые начинаются с PX.*
3. В CL добавьте новый класс CRCaseMaintExt с участник TakeCase вот так:

public class CRCaseMaintExt : PXGraphExtension<CRCaseMaint>
{
        private PXAction<CRCase> TakeCase2;

        [PXButton]
        [PXUIField(DisplayName = "Take Case")]
        public virtual IEnumerable takeCase2(PXAdapter adapter)
        {
            //your custom code
            return adapter.Get();
        }
}

4. Обратите внимание, что регистр в TakeCase и takeCase имеет значение. Также имеет значение PXAction
5. Создайте CL
6. Добавьте ссылку на CL в свой проект Acumatica.

person Yuriy Zaletskyy    schedule 05.05.2015
comment
Тип «PX.Objects.CR.CRCaseMaint» не может использоваться в качестве параметра типа «Таблица» в универсальном типе или методе «PX.Data.PXCacheExtension‹Table›». Неявное преобразование ссылок из «PX.Objects.CR.CRCaseMaint» в «PX.Data.IBqlTable» отсутствует. - person Krunal; 05.05.2015
comment
Извините, пожалуйста, замените PXCacheExtension на PXGraphExtension. Я также изменил ответ - person Yuriy Zaletskyy; 05.05.2015
comment
Все равно кнопка не появляется. Удивительно, но ошибки нет, он просто выполняет приведенный выше код, но кнопка не появляется. - person Krunal; 05.05.2015
comment
Вы уверены, что ссылались на библиотеку классов? - person Yuriy Zaletskyy; 05.05.2015
comment
Да, я ссылался на PX.Common, PX.Data, PX.Objects в своем CL. И добавил ссылку на мой CL на сайт Acumatica. На самом деле моя эталонная DLL CL уже добавлена ​​в папку bin веб-сайта Acumatica, поскольку я создал проект надстройки из Acumatica. - person Krunal; 05.05.2015
comment
Пожалуйста, посмотрите мне еще один ответ. Команда Acumatica уже реализовала эту кнопку. Предлагаю разобраться, что такое редакция команды акуматика, чтобы на экране одновременно не появлялись две кнопки - person Yuriy Zaletskyy; 05.05.2015
comment
Я показал, как добавить еще одну кнопку, но есть вероятность, что вы получите две кнопки. - person Yuriy Zaletskyy; 05.05.2015
comment
К сожалению, не Юра. Я удивлен, что сделал именно то, что вы здесь упомянули, но кнопка вообще не появляется на экране. Есть еще один код, который мне нужно разместить на странице CR306000.aspx для CallbackCommand для источника данных. Но ничего не происходит. - person Krunal; 07.05.2015