yanyuan
2023-08-30 eb958a9c253061d89ea524fe124b326369678557
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Quintiq file version 2.0
#parent: #root
Method MappingSalesSegmentData (
  Strings businessTypes
)
{
  Description: 'ETL销售部门'
  TextBody:
  [*
    // yypsybs Aug-15-2023 (created)
    // 待处理数据
    listToDeal := construct( structured[MappingSalesSegment] );
    if( isnull( businessTypes ) or businessTypes.Size() = 0 ) {
        listToDeal := selectset( this, MappingSalesSegment, item, true );
    } else {
        listToDeal := selectset( this, MappingSalesSegment, item, businessTypes.Find( item.BusinessType() ) <> -1 );
    }
    nameList := construct( structured[String] );
    nameList := selectvalues( listToDeal, Elements, item, true, item.Name() );
    // 检查parent
    traverse( listToDeal, Elements, item, item.ParentName() <> "" ) {
        if( nameList.Find( item.ParentName() ) = -1 ) {
            error( "sales segment parent not found" );
        }
    }
    // 逐层遍历,直至处理完成
    dealtNameList := construct( structured[String] );
    while( listToDeal.Size() <> dealtNameList.Size() ) {
        traverse( listToDeal, Elements, item ) {
            // 未处理过
            if( dealtNameList.Find( item.Name() ) < 0 ){
                // 无父部门,直接处理
                if( item.ParentName() = "" ) {
                    SalesSegment_MP::CreateOrUpdate( this, item.Name(), item.DisplayIndex(), item.ParentName() );
                    dealtNameList.Add( item.Name() );
                } 
                // 有父部门且父部门已处理
                else if( item.ParentName() <> "" and dealtNameList.Find(item.ParentName()) >= 0 ) {
                    SalesSegment_MP::CreateOrUpdate( this, item.Name(), item.DisplayIndex(), item.ParentName() );
                    dealtNameList.Add( item.Name() );
                }
                // 有父部门且父部门未处理,下一轮处理
            }
        }
    }
  *]
}