2017-02-01 8 views
1

I 의 조합을 사용하는 응용 프로그램 콘텐츠를 관리 할 수 ​​Umbraco을 확장 할 & ContentService.Saving을 ContentService.Saved 있습니다.Umbraco7 - ContentService.SaveAndPublishWithStatus VS ContentService.SendToPublication

하나의 Umbraco 설치에 두 개의 웹 사이트가 있습니다.이 방법을 사용하여 트리의 다른 부분에서 내용을 최신으로 유지합니다.

지금까지 내가 원하는 방식으로 모든 것을 작동 시켰습니다.

이제는 Umbraco 사용자가 로그인 한 상태에 따라 콘텐츠를 게시하거나 승인을 위해 보내기 만하는 기능을 추가하고 싶습니다. 이를 위해

cs.SaveAndPublishWithStatus(savedNode, 0, false) 

:

은 그래서에서 몇 줄의 코드를 변경 한

cs.SendToPublication(savedNode); 

지금은 발견하고 문제가 그 SaveAndPublishWithStatus() 방식과는 cs.SendToPublication();에는 save 이벤트가 발생하지 않도록 false를 전달하는 옵션이 없습니다. 그래서 무한 루프에 빠지게됩니다.

디버거를 연결하고 처음으로 무한 루프를 수동으로 중지하면 cs.SendToPublication (savedNode); 나는 내가 원하는 행동을 정확하게 얻는다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까? 내가 사용해야하는 다른 방법이 있습니까?

+0

사용자 역할을 기반으로하는 대신 코드에서이 작업을 수행하는 이유가 있습니까? – Mark

+0

예,이 Umbraco 설치로 인해 두 개의 웹 사이트가 운영되고 있습니다. 사용자가 사이트 1의 콘텐츠를 업데이트하면이 변경 사항은 사이트 2 (자동)에 반영되지만 실제로 사이트 2에 게시되기 전에 사이트 2의 관리자가 승인해야합니다. –

+1

아아아, 나는 당신에게 대답이 없지만 ContentService의 코드를 보면 대답을 찾을 수 있습니다. https://github.com/umbraco/Umbraco-CMS/blob/10b8fd9fb973ddb9b86ebf4e0f5755c43cd22496/src/ Umbraco.Core/Services/ContentService.cs – Mark

답변

0

게시 할 항목을 보낼 때 raiseEvents을 false로 설정할 수 없다는 것이 맞습니다. 이것이 문제입니다. v. 7.6 (http://issues.umbraco.org/issue/U4-9490)에 과부하를 추가했습니다.

그러나 지금 당장 필요하다고 생각하면 임시 해결책은 .Saved/.Saving 이벤트에 의해 트리거 될 때 코드가 한 번만 실행되도록하는 것일 수 있습니다.

코드에서 마지막으로 저장 한 날짜 (UpdateDate)를 확인하는 한 가지 방법입니다. 내용이 현재 저장 조작의 마지막 순간에 저장된 경우, 이는 SendToPublication 조치에서 발생하는 저장에 의해 트리거 된 저장 이벤트라는 것을 알고 있습니다. 그런 다음 아이템이 이미 출판물로 보내 졌음을 다시 알 필요가 없으므로 무한 루프가 발생하지 않습니다.