2013-11-21 3 views
2

SugarCRM Community Edition (버전 6.5.16)에서 인보이스 모듈을 만들고 있습니다.조건부로 SugarCRM에서 필드 읽기 전용으로 만들기

내가 가져 가고자하는 속임수는 '보낸 편지함'이라는 확인란의 값에 따라 필드를 읽기 전용으로 만드는 것입니다. 따라서 : 인보이스가 발송 된 경우 사용자는 인보이스를 더 이상 편집 할 수 없습니다. 내가 editviewdefs에서 읽기 전용 필드을 알고

은 읽기 전용으로 설정 유형에 따라 수행 할 수 있습니다

0 => 
array (
'name' => 'invoicenumber', 
'label' => 'LBL_INVOICENUMBER', 
'type' => 'readonly', 
), 

그러나,이 필드는 읽기 전용에 관계없이 체크 체크 박스 '전송'의 지금이다.

editviewdefs.php에서 PHP로 배열 편집을 시도했지만 항상 필드를 닫습니다. editviewdefs.php가 모든 레코드에 대해 한 번 빌드되면 의미가 있습니다.

PHP 또는 SugarCode (물론 PHP입니까?)에서이 작업을 수행 할 수 있습니까? 내가 바꾸고 싶은 최후의 수단은 자바 스크립트를 사용하는 것입니다. 그러나 이것은 매우 중요한 기능이기 때문에 피해야합니다. 한 사용자가 실수로 자바 스크립트를 사용 중지하면 결국 엉망이 될 수 있습니다.

문의 사항이 있으시면 언제든지 문의하십시오. 이 OP를 위해 가능한 한 작은 코드를 포함 시켰습니다. 그러나 코드에 관한 질문이 있으시면 언제든지 물어보십시오!

고맙습니다.

+0

나는 해냈다. Stackoverflow가 나를 허용 할 때 이것을 대답 할 것입니다 (지금 그렇게할만한 평판은 없습니다) – TheUnpragmaticProgrammer

답변

2

찾았습니다.

문제는 내가 코드를 넣은 것이 아니고, 문제는 viewdefs를 캐싱하는 것이 었습니다. 그래서 repair + rebuild 후에 보이는 첫 번째 항목은 다른 항목의 기본값이됩니다. 개발자 모드로 SugarCRM을 설정 했으므로 처음에는 문제를 발견하지 못했습니다. 개발자 모드에서는 viewdef를 캐시하지 않습니다.

이동하는 가장 쉬운 방법은 다음과 같이이다 : 먼저, 복사 editviewdefs을 당신이 원하는대로 그것을 이름 (광산은 다음과 같습니다 closededitviewdefs.php) 지금, 변화는 당신이 무엇을 새로 만든 editview 파일에 좋아한다. 변경 한 후에 closededitviewdefs.php의 5 번째 줄을 'EditView' =>에서 'ClosedEditView' => 으로 변경하십시오. 모듈/views 폴더에 view.edit.php 파일을 만드십시오. 내용은 다음과 같습니다 (적용 가능한 경우 모듈 별 내용 바꾸기).

<?php 
class [REPLACEWITHMODULENAME]ViewEdit extends ViewEdit { 
    public function preDisplay() { 

     $bean = $this->bean; 
     $isClosed = $bean->sent; 

     if ($isClosed==1) { 
      $metadataFile = 'custom/modules/[MODULEFOLDER]/metadata/closededitviewdefs.php'; 
      $this->ev = $this->getEditView(); 
      $this->ev->view = 'ClosedEditView'; 
     } else { 
      $metadataFile = 'custom/modules/[MODULEFOLDER]/metadata/editviewdefs.php'; 
      $this->ev = $this->getEditView(); 
     } 
     $this->ev->ss =& $this->ss; 
     $this->ev->setup($this->module, $this->bean, $metadataFile, get_custom_file_if_exists('include/EditView/EditView.tpl')); 
    } 
} 
?> 

이렇게하면 두 개의 캐시 파일이 만들어집니다. 여기에는 한 가지 중요한 문제점이 있습니다. closededitview에 머리글과 바닥 글이 없습니다! 당신은 쉽게 closededitviewdefs.php에 다음을 추가하여이 문제를 해결할 수 있습니다

'form' => 
array(
    'headerTpl' => 'include/EditView/header.tpl', 
    'footerTpl' => 'include/EditView/footer.tpl', 
), 

확실히 개발자 모드가 정확한 테스트 결과를 해제합니다. 복구 & 복구를 실행하십시오. 이제 모든 것이 예상대로 작동합니다. :)

-1

이것은 Sugarcrm의 Sugar Logic이 훌륭하게 작동하는 좋은 예가 될 것입니다. 설탕 개발 블로그도 조금 전에 비슷한 예를 썼습니다. http://developer.sugarcrm.com/2012/11/08/using-sugar-logic-to-conditonal-make-fields-read-only/

+0

그럴 것입니다! 그러나 불행히도 우리는 완전한 단 한 번의 면허를 구입할 수있는 위치에 있지 않습니다.우리는 지금 Community Edition을 사용 중입니다. 원하는 모든 작업을 수행 할 수 있지만 코딩을 더 많이 수행해야합니다. 그리고 Sugar 내에서 (쉽게) 수행되지 않는 것들을 위해 Sugar 데이터베이스 위에 외부 응용 프로그램을 구축했습니다. 그러나 장기적으로 라이선스와 Sugar Logic이 더 나을 것이라고 확신합니다. – TheUnpragmaticProgrammer

관련 문제