해당 레이어에 설치된 모든 레이어와 모델에 구성 요소 존재 여부를 찾는 방법을 알려줄 수 있습니까? 즉 특정 구성 요소 (도끼 2012)가있는 모든 계층과 모델을 찾습니다. 예를 들어 CustTable이있는 모든 계층과 모델을 찾는 방법을 참조하십시오. 이 정보를 저장하는 클래스 또는 테이블이 있습니까? 도와주세요. 미리 감사드립니다.모든 레이어와 모델에서 Ax 2012 구성 요소가 존재합니다.
답변
코멘트가 제한된다 :(
당신이 병합 후보를 찾고 있습니까? 소스 코드를 검색해야합니까? 저에게 당신의 비즈니스 요구 사항을 알려주십시오. 여기에
이 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')
나는 지난 번에 내가 분명하지 않았다고 생각해. 내 요구 사항은 지정된 구성 요소가있는 모든 레이어와 모델을 찾는 것입니다. 예를 들어 'CustTable'구성 요소는 SYS 계층 Foundation 모델과 ISV 계층 I4C 모델에 있습니다. 그런 다음 쿼리는 SYS 계층과 모델 Foundation 및 ISV 계층과 모델 I4C를 반환해야하지만 이전 쿼리는 해당 계층과 모델에서 구성 요소 사용을 반환하므로 많은 레코드가 생성됩니다. 내 요구 사항에 따라 오직 2 개의 레코드가 정확해야합니다 즉 첫 번째 레코드 SYS | 기초. 2 차 기록 | ISV | I4C, TIA 도와주세요. – user3226663
당신이 시도 할 수 _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
을 삭제하십시오.
여기서 ro.Name = 'InventDim'대신 WHERE cast ([SourceText] as nvarchar (max))와 같이 '% CustTable % '는이 구성 요소가있는 레이어와 모델을 가져옵니다. 구성 요소가있는 레이어와 모델을 찾는 올바른 방법입니다. – user3226663
'ro.Name = 'InventDim'은 * InventDim * 테이블 내의 모든 어커런스를 반환합니다. '% InventDim %'와 같이 '% InventDim %'와 (와) 같은 캐스트 ([SourceText])와 같은'캐스트 ([SourceText] as nvarchar (max)) '를 사용하는 것이 이해가된다면 - ro ': 루트 AOT 노드 (테이블, 클래스, ...) -'me' : 자식 AOT 노드 (메소드) - s : X ++ 소스 코드 – Matej
사실 레이어와 모델에서 CustTable의 존재를 찾고 싶습니다. 위는 모든 사건을 보여줍니다. 하지만 CustTable이 SYS 및 Model Foundation 계층과 ISV 모델 I4C 계층에있는 경우와 같은 레코드를 원합니다. 그럼 난 다음과 같이 표시해야합니다 ComponentName | 층 | 모델 그래서 2 레코드 CustTable 얻을 것이다 | SYS | 재단 및 CustTable | ISV | I4C. 이런 식으로 필터링 할 수 있습니까? 찾는데 도와주세요. 미리 감사드립니다. – user3226663
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에 의해 제안 말, 작은 변화가 내 요구 사항에 따라 올바른 결과를 제공했다 만들었습니다.
* CustTable *을 만진/수정 한 모든 모델 또는이 모델이 사용/참조되는 모든 모델이 필요합니까? – Matej
@Matej 예이 테이블이 사용되는 모든 모델과 해당 모델의 각 레이어 – user3226663