AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.01.2008, 15:00   #1  
Blog bot is offline
Blog bot
Участник
 
25,631 / 848 (80) +++++++
Регистрация: 28.10.2006
aEremenko: DAX 2009, работа с несколькими компаниями
Источник: http://blogs.msdn.com/aeremenk/archi...6/7128142.aspx
==============

DAX 2009 позволяет осуществлять доступ к авторизированным данным всех компаний из форм, запросов и кода X++. Поддерживаются все типы источников данных, включая табличные коллекции и представления. Правда не поддерживаются базовые структуры типа RecordInsertList и RecordSortedList.

С точки зрения изменений в коде введены новые ключевые слова в X++ и параметры структур запросов.
Новое ключевое слово для работы с компаниями в X++:
select crosscompany custTable // выборка по всем компаниям
join custTrans
where custTable.AccountNum == custTrans.AccountNum;


Есть возможность фильтрации в запросе с помощью контейнеров:

CustTable custTable;
Container companies;
;
companies = ["DMO", "DAT"]; // контейнер
while select crosscompany: companies * from custTable // фильтрация
{

...
}

Произошли изменения работе с запросами, добавлен параметр работы с несколькими компаниями, AllowCrossCompany (Yes, No) в AOT и структуре запросов, использовать его можно, например, так:
Query qr = new Query();
qr.allowCrossCompany(‘True’); // 'false' является умолчательным
Получить текущее значение фильтра по компаниям, изменить и очистить его можно следующим образом:

Query qr = new Query();
container cons;
;
cons = qr.getCompanyRange();
// компании в обработке
qr.addCompanyRange(‘DAT’); // добавление компании в фильтр qr.clearCompanyRange(); // очистка списка
Раз есть возможность получения данных по разным компаниям в результате одного запроса, то есть и возможность смотреть данные из разных компаний в одном гриде (изменением параметра в источнике данных формы, например):


При обновлении данных, требуется доступ к реальной компании. Следовательно, необходим доступ к буферу с данными компании для обновления, для этого переключаемся в требуемую компанию и производим операцию:
CustTable ct;
ttsbegin;
while select forupdate crosscompany ct
{
changecompany(ct.company())
{
ct.CreditMax += 10;
ct.update();
}
}
ttscommit;

В коде, указанном выше, используется метод company() для идентификации текущей компании. Естественно можно было бы использовать и поле DataAreaId в качестве идентификатора, подставив ct.DataAreaId в функцию changecompany. Разница же в том, что в случае табличной коллекции, company() вернет правильный идентификатор реальной компании, а DataAreaID будет содержать значение/идентификатор виртуальной компании или реальной компании в зависимости от типа источника данных.
Данная статья подготовлена с помощью Windows Live Writer.


Источник: http://blogs.msdn.com/aeremenk/archi...6/7128142.aspx
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
За это сообщение автора поблагодарили: glibs (3).
Старый 23.01.2008, 21:37   #2  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
Цитата:
Правда не поддерживаются базовые структуры типа RecordInsertList и RecordSortedList.
В каком смысле? Не поддерживаются только в плане авторизованного доступа к нескольким компаниям или вообще?
Старый 24.01.2008, 09:42   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Blog bot Посмотреть сообщение
Есть возможность фильтрации в запросе с помощью контейнеров:
CustTable custTable;
Container companies;
;
companies = ["DMO", "DAT"]; // контейнер while select crosscompany: companies * from custTable // фильтрация
{
...
}
Класная штука. А что такое DAX 2009?
Старый 24.01.2008, 13:20   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Тема разделена. Про новое наименование - пишите в следующую тему: Новая концепция наименования продуктов серии Dynamics

А здесь можно обсудить очень полезный механизм доступа к данным всех компаний.

С Уважением,
Георгий
Старый 24.01.2008, 18:20   #5  
Zuzaz is offline
Zuzaz
Участник
 
119 / 18 (1) ++
Регистрация: 22.09.2006
Цитата:
Сообщение от Blog bot Посмотреть сообщение
select crosscompany custTable // выборка по всем компаниям


Цитата:
Сообщение от Blog bot Посмотреть сообщение
companies = ["DMO", "DAT"]; // контейнер
while select crosscompany: companies * from custTable // фильтрация

Вопрос: во втором примере после crosscompany действительно ставится двоеточие?
Старый 24.01.2008, 18:24   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Угу А что?
Старый 24.01.2008, 18:56   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Класс!!!
Старый 28.10.2010, 13:41   #8  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Blog bot
...
DAX 2009 позволяет осуществлять доступ к авторизированным данным
...
А что понимается под "авторизированными данными"?

Насколько я представляю

while select custTable {...}

если он запускается под пользователем, у которого нет доступа к таблице CustTable, то он переберет все записи.

В ходе следственного эксперимента у меня получилось, что

while select crosscompany custTable {...}

если он запускается под пользователем, у которого нет доступа к таблице CustTable, не выберет ни одной записи.

Именно это имеется в виду?

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

changecompany (...)
{
while select custTable {...}
}

?

Тут, кстати,

http://msdn.microsoft.com/en-us/library/cc634544.aspx

написано

"
The results returned for an X++ select crossCompany query match what could be returned by a union of several select statements that each omits the crossCompany keyword.
"

Хотя есть и такое

"
A cross-company query operates over all companies that you have read permissions for, or over a subset of companies that you specify.
"

Столкнулся с проблемой при настройке функциональности сопоставления открытых проводок клиентов-поставщиков. Пока у пользователя нет доступа к таблице SpecTrans на чтение, функциональность сопоставления не работает и ведет себя неадекватно. Причина в том, что в коде ряда edit-методов используется select crosscompany. Как консультант, настраивающий права, должен догадаться в чем проблема не видя код при этом, не понятно.
__________________
С уважением,
glibs®
Старый 28.10.2010, 14:43   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от glibs Посмотреть сообщение
Как консультант, настраивающий права, должен догадаться в чем проблема не видя код при этом, не понятно.
А в Аксапте практически не осталось консультантов не умеющих читать код
Теги
ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Amand: Intercompany в Dynamics AX, работа с несколькими компаниями. Blog bot DAX Blogs 0 27.10.2008 23:05
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
aEremenko: DAX 2009, несколько временных зон Blog bot DAX Blogs 0 31.01.2008 08:41
Работа с несколькими компаниями DanielG DAX: Функционал 11 30.10.2006 13:44

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:10.