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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.01.2006, 15:58   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Синхронизация программно
Добрый вечер!

Не подскажите как программмно синхронизировать таблицу?
Старый 24.01.2006, 16:01   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Application::dbSynchronize(...)
Старый 24.01.2006, 16:33   #3  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо!

Немного зациклился как передать в dbSynchronize() tableId..

Я перебираю таблицы, у меня есть treeNode.
Старый 24.01.2006, 16:53   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
ну, всегда можно в крайнем случае воспользоваться
AOTgetProperties() - он вернет строку, и в ней должен быть первым свойством как раз tableid

Думаю, просто, что есть и более изящный способ
Старый 24.01.2006, 16:54   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
можно воспользоваться стандатртными средствами:
X++:
SysTableBrowser::treeNode2TableId(TreeNode treeNode);
__________________
Возможно сделать все. Вопрос времени
Старый 24.01.2006, 17:12   #6  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Большое Спасибо!!
Старый 24.01.2006, 17:19   #7  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Извиняюсь за оффтоп:

Вот таким извращением можно менять свойства treeNode (Здесь свойства типа NoYes):

PHP код:
str updateTreeNodeProperties(str    _str,
                             
str    _property,
                             
NoYes  _value NoYes::Yes)
{
    
int position;
    
int length strLen(_str);
    
int positionOfValue;
    ;

    
position        strScan(_str,_property,1,length);
    
positionOfValue strScan(_str,'#',position,length);

    if(
_value == NoYes::Yes &&
        
subStr(_str,positionOfValue +1,1) == 'N')  // NoYes::Yes
    
{
        
_str strDel(_str,positionOfValue 1,2);
        
_str strIns(_str,'Yes',positionOfValue 1);
    }
    else if(
_value == NoYes::No &&
        
subStr(_str,positionOfValue +1,1) == 'Y')       // NoYes::No
    
{
        
_str strDel(_str,positionOfValue 1,3);
        
_str strIns(_str,'No',positionOfValue 1);
    }

    return 
_str;

Старый 24.01.2006, 18:39   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
можно ... но сложно как-то ...
Вот пример попроще:
X++:
static void superJob(Args _args)
{
    TreeNode treeNode = TreeNode::findNode('\\Data Dictionary\\Tables\\Address');
    str properties = treeNode.AOTgetProperties();
    str property;
    #Properties
    ;
    property = findproperty(properties, #PropertyTemporary);
    if (property == #PropertyValueYes)
    {
        properties = setproperty(properties, #PropertyTemporary, #PropertyValueNo);
    }
    treeNode.AOTsetProperties(properties);
}
__________________
Возможно сделать все. Вопрос времени
Старый 25.01.2006, 10:51   #9  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
?
Спасибо! Действительно проще.

После моего кода, таблицы остаются не синхронизированными:

PHP код:
public void run()
{
    
UtilIdElements      utilIdElements;
    
TreeNode            treeNode;
    
TreeNodeIterator    it = new TreeNodeIterator();
    
str                 propertyStr;
    
Application         application = new Application();
    ;

    
treeNode    TreeNode::findNode("\\Data Dictionary\\Tables");
    
it          treenode.AOTiterator();
    
treeNode    it.next();

    while(
treeNode)
    {
        
treeNode.AOTrestore();

        if(
strScan(treeNode.AOTname(),'sys',1,100))
            continue;
        if(
strScan(treeNode.AOTname(),'DEL',1,100))
            continue;
        if(
strScan(treeNode.AOTname(),'xRef',1,100))
            continue;

        
propertyStr treeNode.AOTgetProperties();

        if(
createdBy)
            
propertyStr this.updateTreeNodeProperties(propertyStr,'CreatedBy');

        
treeNode.AOTsetProperties(propertyStr);
        
treeNode.AOTsave();

        
application.dbSynchronize(SysTableBrowser::treeNode2TableId(treeNode));

        
treeNode it.next();
    }



Последний раз редактировалось DreamCreator; 25.01.2006 в 11:06.
Старый 25.01.2006, 11:17   #10  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Помимо того что не синхронизируется, не могу понять такую закономерность:

Если мой класс (наследник RunBaseBatch, в нем весь алгоритм, и он вызывается)
имеет RunOn:

-- Server : не синхронизирует и не изменяет свойства у таблиц! (т.е. вообще не работает)

-- CalledFrom,Client -- изменяет свойства, но не синхронизирует!


Оставляю возможность, что я чего не досмотрел, но пока вопрос!
Старый 25.01.2006, 12:04   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
посмотрите параметры метода dbSynchronize. Второй параметр отвечает именно за принудительную синхронизацию.
И еще. Нет необходимости создавать экземпляр класса Application. Уже есть в системе глобальная переменная appl, созданная на сервере.
__________________
Возможно сделать все. Вопрос времени
Старый 25.01.2006, 12:10   #12  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо! Проблема полностью решена!

PHP код:
appl.dbSynchronize(SysTableBrowser::treeNode2TableId(treeNode),false); 
За это сообщение автора поблагодарили: CHESER85 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Удаление отгрузочной накладной программно Sada DAX: Программирование 14 03.11.2006 09:01
навязчивая синхронизация Антон Солдатов DAX: Функционал 11 22.04.2005 11:04
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Репликация и синхронизация Tays DAX: Администрирование 12 24.11.2004 12:18
синхронизация с outlook alpine DAX: Функционал 7 09.06.2004 13:53

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

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

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