2015-01-21 1 views
1

해당 레이어에 설치된 모든 레이어와 모델에 구성 요소 존재 여부를 찾는 방법을 알려줄 수 있습니까? 즉 특정 구성 요소 (도끼 2012)가있는 모든 계층과 모델을 찾습니다. 예를 들어 CustTable이있는 모든 계층과 모델을 찾는 방법을 참조하십시오. 이 정보를 저장하는 클래스 또는 테이블이 있습니까? 도와주세요. 미리 감사드립니다.모든 레이어와 모델에서 Ax 2012 구성 요소가 존재합니다.

+0

* CustTable *을 만진/수정 한 모든 모델 또는이 모델이 사용/참조되는 모든 모델이 필요합니까? – Matej

+0

@Matej 예이 테이블이 사용되는 모든 모델과 해당 모델의 각 레이어 – user3226663

답변

2

코멘트가 제한된다 :(

당신이 병합 후보를 찾고 있습니까? 소스 코드를 검색해야합니까? 저에게 당신의 비즈니스 요구 사항을 알려주십시오. 여기에

CustTable를 포함 요소를 반환하는 쿼리입니다 일부 모델에서 : 쿼리에 추가

SELECT 
    me.Name ElementName 
    , Layer.Name Layer 
    , mm.Name ModelName 
    , ElementTypes.ElementTypeName 
FROM ModelElement me 
    JOIN ModelElementData med 
     ON med.ElementHandle = me.ElementHandle 
     AND me.ParentHandle = 0 -- only root elements 
    JOIN ModelManifest mm 
     ON mm.ModelId=med.ModelId 
    JOIN Layer 
     ON Layer.Id = med.LayerId 
    JOIN ElementTypes 
     ON me.ElementType = ElementTypes.ElementType 
WHERE EXISTS (
    SELECT null 
    FROM ModelElement child 
     JOIN Sources s 
     ON s.SourceHandle = child.ElementHandle 
      AND s.LayerId = med.LayerId 
      AND child.RootHandle = med.ElementHandle 
    WHERE cast([SourceText] as nvarchar(max)) like '%CustTable%' 
) 
AND mm.Name IN ('Foundation','I4C') 
+0

나는 지난 번에 내가 분명하지 않았다고 생각해. 내 요구 사항은 지정된 구성 요소가있는 모든 레이어와 모델을 찾는 것입니다. 예를 들어 'CustTable'구성 요소는 SYS 계층 Foundation 모델과 ISV 계층 I4C 모델에 있습니다. 그런 다음 쿼리는 SYS 계층과 모델 Foundation 및 ISV 계층과 모델 I4C를 반환해야하지만 이전 쿼리는 해당 계층과 모델에서 구성 요소 사용을 반환하므로 많은 레코드가 생성됩니다. 내 요구 사항에 따라 오직 2 개의 레코드가 정확해야합니다 즉 첫 번째 레코드 SYS | 기초. 2 차 기록 | ISV | I4C, TIA 도와주세요. – user3226663

2

당신이 시도 할 수 _model 내 검색 다음 쿼리 databese (모든 코드 참조 searcehs - 테이블, 클래스, 양식, 데이터 세트, ...을) :

SELECT TOP 1000 [SourceHandle] 
    , met.ElementTypeName 
    , ro.Name object 
    , me.Name method 
    , l.Name Layer 
    , mm.Name Model 
    , cast([SourceText] as nvarchar(max)) sourceTxt 
FROM [Sources] s 
    join ModelElement me on me.ElementHandle=s.SourceHandle 
     join ElementTypes met on met.ElementType=me.ElementType 
    join ModelElement ro on ro.ElementHandle=me.RootHandle 
    left join ModelElementData med on med.ElementHandle=s.SourceHandle and med.LayerId=s.LayerId and med.ElementHandle=me.ElementHandle 
    left join Layer l on l.Id=s.LayerId 
    left join ModelManifest mm on mm.ModelId=med.ModelId 
WHERE cast([SourceText] as nvarchar(max)) like '%CustTable%' 

모든 기록을해야하는 경우 TOP 1000을 삭제하십시오.

+0

여기서 ro.Name = 'InventDim'대신 WHERE cast ([SourceText] as nvarchar (max))와 같이 '% CustTable % '는이 구성 요소가있는 레이어와 모델을 가져옵니다. 구성 요소가있는 레이어와 모델을 찾는 올바른 방법입니다. – user3226663

+0

'ro.Name = 'InventDim'은 * InventDim * 테이블 내의 모든 어커런스를 반환합니다. '% InventDim %'와 같이 '% InventDim %'와 (와) 같은 캐스트 ([SourceText])와 같은'캐스트 ([SourceText] as nvarchar (max)) '를 사용하는 것이 이해가된다면 - ro ': 루트 AOT 노드 (테이블, 클래스, ...) -'me' : 자식 AOT 노드 (메소드) - s : X ++ 소스 코드 – Matej

+0

사실 레이어와 모델에서 CustTable의 존재를 찾고 싶습니다. 위는 모든 사건을 보여줍니다. 하지만 CustTable이 SYS 및 Model Foundation 계층과 ISV 모델 I4C 계층에있는 경우와 같은 레코드를 원합니다. 그럼 난 다음과 같이 표시해야합니다 ComponentName | 층 | 모델 그래서 2 레코드 CustTable 얻을 것이다 | SYS | 재단 및 CustTable | ISV | I4C. 이런 식으로 필터링 할 수 있습니까? 찾는데 도와주세요. 미리 감사드립니다. – user3226663

0
SELECT DISTINCT 
    ro.Name object, 
    ro.ElementType type, 
    l.Name Layer, 
    mm.Name Model 
FROM Sources s 
    join ModelElement me on 
     me.ElementHandle = s.SourceHandle 
    join ElementTypes met 
     on met.ElementType = me.ElementType 
    join ModelElement ro 
     on ro.ElementHandle = me.RootHandle 
    left join ModelElementData med 
     on med.ElementHandle = s.SourceHandle 
     and med.LayerId  = s.LayerId 
     and med.ElementHandle = me.ElementHandle 
    left join Layer l 
     on l.Id = s.LayerId 
    left join ModelManifest mm 
     on mm.ModelId = med.ModelId 
      where ro.Name = 'InventDim' order by mm.Name, ro.ElementType 

는 AUT에 의해 제안 말, 작은 변화가 내 요구 사항에 따라 올바른 결과를 제공했다 만들었습니다.