질문/조언질답게시판

extra_vars.jpg

 

문서가 정보를 가질 수 있는 입력값 중에 extra_vars 라는 컬럼이 있습니다. 

예전에 여기에 해당 문서의 특정한 고유의 변경되는 값을 해당 이벤트가 일어날때 저장되도록 해서 그 값을 이용하게 구현한 적이 있습니다. 애드온으로 구현했었는데요.

 

이때 구현하면 한가지 이상한 점이 있있습니다.

애드온에 의해 특정 이벤트에 해당 이벤트 기록을 저기에 저장을 했는데 해당 게시글을 수정하게 되면 해당 값이 사라져 버리는 문제점이 발견되었습니다.

 

 

그래서 해당 애드온에 procBoardInsertDocument_before 시점에서 

해당 값을 쿼리해 온 후 

Context::set('extra_vars', $exvars, true);

 

로 문서 저장 직전에 해당 값도 함께 가지도록 애드온에서 구현하여 불러온 값이 다시 저정되도록 했습니다.

 

 

저 값이 글을 수정하면 날아가게 만든 이유는 뭘까요???

  • profile
    글을 수정하면 날아가도록 누가 일부러 망가뜨렸다기보다는,
    1) 예전에 확장변수에 들어가던 값들은 모두 별도의 테이블로 빠져버렸고
    2) 애드온으로 추가하셨던 확장변수는 글 수정 화면에서 다시 제출하지 않았을 테니
    남은 것이 없어서 그냥 빈 값으로 업데이트되는 것 아닐까요?
  • profile profile

    별도의 테이블로 빠졌다는게 어디로 빠진거죠??

     

    또 한가지 추가로 이상한점이 발견된게 라이믹스 2.0 으로 업데이트 한 곳에서는 애든에서 저곳으로 값이 입력이 안되네요. 왜 안되는지 디버그를 해봐야겠습니다.

  • profile profile

    document_extra_vars 라는 테이블안에 있습니다.

    해당 부분에 document_srl 에 따라 값들을 여러개 저장하고 있습니다.

     

    ex) 확장변수가 2가지 이상을 입력햇을때

    1234 key_name1 value1

    1234 key_name2 value2

     

    순서에 따라 document_srl, 확장변수로 지정한 키값이름, 실제저장데이터

     

    간단한 예시로 보여드린것이라 빠진 내용이 있을 수 있지만 대부분 이렇게 저장합니다.

    https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/document_extra_vars.xml

    https://github.com/rhymix/rhymix/blob/master/modules/document/schemas/document_extra_keys.xml

    두가지 칼럼 참고하세용

  • profile profile
    해당 테이블을 말씀드린게 아닌데요...

    문서가 가지는 컬럼 extra_vars 를 말씀 드린겁니다.
  • profile profile
    "별도의 테이블로 빠졌다는게 어디로 빠진거죠??"
    라고 질문주셔서 그 답변을 드린 것 입니다.

    따라서 해당 extra_vars에 들어가는 값을 빈값으로 저장할 수 있다는 뜻입니다..
  • profile profile
    문서의 메모를 했는데 별도의 테이블로 빠진다는게 이해가 잘 안갑니다. 지금 확장변수와 관련없는 이야기기도 하구요.
  • profile profile

    1. 우선 obj->extra_vars 으로 넘어온 값이 string이 아니라면 값을 serialize 하여 저장하도록 되어있습니다 (8년전부터)
    https://github.com/rhymix/rhymix/blame/master/modules/document/document.controller.php#L790

    이는 최근 rhymix master 버전까지 변화된점은 없어보이는데, 수정시 애드온에서 처리하는 항목에 $exvars <-변수에 넣은 값이 정확히 어떻게 추가된것인지 확인이 필요할 것 같은데요.

    그리고 실제로 documents 테이블의 extra_vars 칼럼에 넣는 방식보다는 이제는 테이블이 분리되어 운영되기때문에 실제로 extra_vars_key테이블과 value 테이블을 모두 이용하여 만드는 것이 정석입니다.(애초에 라이믹스가 탄생하기전 xetown이 탄생하기전부터 그렇게 동작하도록 되어있었던거죠 ㅎㅎ)

  • profile profile
    자꾸 다른 이야기를 하시네요.
    저는 사용자정의를 사용한다고 한적이 없습니다. 그리고 해당 필드에 serialize 로 저장하도록 하고 있구요.
  • profile profile
    Context::set('extra_vars', $exvars, true); 에 선언한 exvars 디버깅 찍으면 어떻게 나오시나요?
  • profile profile
    extra_vars 를 쓰면서 확장변수(사용자정의)와 관련이 없지 않습니다.

    관련이 있으니 같이 설명을 드린 것 이예요. 너무 단정지어서 생각하시지 마시고 제가 답변드린 이유도 생각해주셨으면 좋겠습니다..ㅠㅠ

    extra_vars를 현재 상황에서 아래 yjsoft님께서 말씀하신 것과 같이 막 쓰는 존재가 이제는 아니거든요. 그리고, 윗질문에서 기진님의 답변에 물음에 제가 extra_vars가 어디 테이블로 빠졌는지에 대한 답변을 드렸던 것이고요..ㅠㅠ
  • profile

    1. 해당 칼럼은 과거 버전의 XE에서 확장변수 저장을 위해 사용했었습니다.
    2. 현 버전의 XE나 라이믹스는 확장변수를 extra_vars1, extra_vars2 형태로 전송합니다.
    3. 하지만 XE나 라이믹스 모두 extra_vars 설정 부분은 그대로 남아 있습니다.
    4. 글 작성시 extra_vars라는 값은 없으므로 serialize 과정에서 N;만 남습니다.
    5. 따라서 글을 수정하면 기존 값은 지워지고 N;만 남습니다.

  • profile profile
    과거 최조 목적은 저는 잘 알지는 못하나 현재 글 수정시 해당 값이 지워지는 구조는 남아 있는 입력 공간의 활용에 약간 애로점으로 작동하네요.

    지금처럼 글 수정시에 이미 저장된 값을 불러와서 글 수정 저장시 다시 저장되도록 하는게 최선이겠네요.
  • profile

    수정 페이지에서 extra_vars 칼럼값을 불러오지 않는게 아닐까요? 수정페이지에 해당 값을 불러오지 않으니 공란으로 되어 있고 그 공란 값에서 수정 완료하니 그 공란 값으로 extra_vars 칼럼 값을 업데이트 하는...^^;;

  • profile profile
    네. 그 불러오지 않게 한 이유가 궁금해서 질문을 올린 것입니다. 불러온다면 뭔가 잘못된거구요.
  • profile

    말씀하신 애드온이 특정 변수의 변수값 변경시 작동해서 extra_vars 를 다룬다는 것이죠?
    procBoardInsertDocument 함수는 extra_vars 컬럼을 따로 저장하거나 하지 않고 있구요.

    extra_vars에 저장된 값이 글 수정시 날아가게 만는 이유는
    다른 분들 말씀처럼 확장변수 기능이 다른 테이블로 대체되면서 extra_vars 컬럼이 방치되었던 것 같구요.

    그 바람에 procBoardInsertDocument 함수에서 insertDocument나 updateDocument로 object를 전달할 때 extra_vars 컬럼의 데이터를 누락하고 있는 것 같습니다.
    어차피 board 모듈에서 확장변수는 별도 테이블로 처리한다는 방침인 것 같으니...

    언급하신 애드온이 특정 변수의 변수값 변경시에 extra_vars 컬럼을 다룬다고 이해했는데요.

    1. 이 때 기준을 procBoardInsertDocument이 아니라 insertDocument나 updateDocument에 트리거를 거는 쪽으로 잡아야 하지 않을까 싶습니다. 거기에서는 extra_vars값이 처리가 되거든요.
    2. 그게 아니라 procBoardInsertDocument를 기준으로 계속 삼겠다 한다면, '특정 변수의 변수값 변경시'에만 extra_vars 컬럼을 저장하는 게 아니라 어떤 동작에든 대응하도록 한다든지요.
    3. 그것도 아니면 아예 코어 수준에서 procBoardInsertDocument 함수가 insertDocument나 updateDocument 함수를 실행할 때 extra_vars 컬럼도 전달해달라고 이슈를 넣는 것도 방법일 것 같습니다.
  • profile profile
    네. 글 수정시에 해당 컬럼 데이터를 빼고 전송하는 이유가 궁금했구요. 이게 별다른 이유가 없다면 포함시켜줬으면 좋겠다는 이슈 등록으로 연결이 될까해서 질문으로 올린 글입니다.

    일단 현재 글 수정시 해당 항목은 누락이 된다고 하니 제가 지금 애드온에서 문서 인서트 직전(수정인지 확인은 합니다. 수정시에먄...) 해당 컬럼의 값을 가져와서 누락되지 않도록 하고 있으니 이점 기억하고 있으면 될 것 같습니다.

    다른 필요가 있다면 이슈로 등록하던지 해보겠습니다.
  • profile

    다시 말씀드리자면 extra_vars 컬럼은 과거에 (대략 10년 전?) 확장변수를 저장하는 데 사용했던 컬럼입니다. 그래서 계속 확장변수 얘기가 나오는 것입니다. 아무튼 현재 XE, 라이믹스 코어에서는 해당 컬럼을 사용하지 않고 있으며, 단지 빈 값이 들어오면 빈 값이 저장될 뿐입니다.

    사실 언제 삭제되더라도 이상하지 않은 컬럼이니, 그 컬럼에 데이터를 저장하는 애드온은 원칙적으로 모두 잘못하고 있는 것입니다. (대표적으로 모바일 작성글 표시 애드온이 그런 억지를 부리는 것으로 알고 있습니다.) 그러나 현실적으로 오래된 애드온을 고치기 쉽지 않으므로, 차라리 extra_vars 컬럼의 값을 최대한 보존할 수 있도록 코어 차원에서 배려하는 편이 나을지도 모르겠습니다.

  • profile profile
    언제라도 삭제되더라도 이상하지 않을 만큼이라고 하기엔 너무 오랜 시간이 지나서 여러 자료에서 해당 공간을 잘 활용하고 있는 부분도 감안해 주시기 바랍니다. 언제라도 삭제 가능하다는 것에서 기존 구현해 놓은 것들이 일시에 작동을 안할 수 있으니까요.

    개인적으로는 별도 테이블을 만들지 않으면서(기술적 혹은 환경적 이유로) 문서와 매칭 시킬 수 있는 여유의 메모 공간이 있다는 것에는 만족 스러운 남겨진 필드라고 생각합니다.
  • profile profile
    이미 수시로 (글을 수정할 때마다) 삭제되고 있기는 합니다...
  • profile profile
    아니요. 글을 수정할때 마다 삭제되지 않도록 조치해서 해당 필드에 문서 맞춤 데이터를 저장하고 있는데 이게 갑자기 언제라도 사라진다고 하니 말씀 드린 부분입니다.
  • profile profile
    글을 수정할 때마다 삭제되는 것이 지난 10여년간 기본값이었던 것 같으니, 굉장히 주의깊게 만들어진 자료가 아니면 과연 제대로 활용할 방법이 있었는지 의문이 든다는 말입니다.

    실제로 이를 보완하여 활용하고 있는 사례가 많다면 제대로 활용할 수 있도록 정식으로 지원을 해야겠고, 그렇지 않다면 확실하게 정리를 해야겠지요. 지금은 컬럼이 있기는 한데 수시로 데이터가 날아가는 흠좀무한 상황이니까요. 이쪽이든 저쪽이든 결정이 필요하겠습니다.
  • profile ?
    저는 extra_vars컬럼을 사용하는 입장에서 기존 칼럼은 유지하는 방향으로 고려해주셨으면 좋겠습니다.
    간단한 기능을 모듈로 만들어 테이블까지 생성하는 것 보다 애드온으로 값만 저장해두는 것이 편리할때가 있습니다.

    현재 코어 구조상 extra_vars컬럼을 활용하려면 입력한 쪽에서 본인 데이터가 유지되도록 코드를 작성해야 합니다.
    저는 그렇게 하고 있고 회원테이블 extra_vars과 같은 방식이기에 다른 분들도 같은 규칙으로 처리하고 계신다고 생각합니다.

    게시물 수정시 extra_vars 값이 사라지는 것은 extra_vars 값만 그런것이 아니고
    확장변수, 카테고리 등 스킨에서 수정시에 값을 넘겨주지 않으면 다 사라지는 것으로 알고 있습니다.
    그래서 표시하지 않고 싶으면 hidden으로라도 넘겨주어야 합니다.

    코어에서 기존값을 유지해주는 것도 나쁘진 않아보이나 기존자료들에 영향이 없는지 확인이 필요하겠습니다.
  • ? profile
    넵, 실제로 활용하시는 분들이 인증(?)을 많이 해주실수록 유지될 확률이 높아집니다.^^
  • profile profile

    저는 무척 많이 이용하고 있습니다. 사라진다면 저희는 타격이 너무 심할 것 같습니다.

  • profile profile
    안녕하세요,

    플래너XE123에서는 문서 테이블에 있는 extra_vars 필드에 일정의 상태 값을 저장해놓고, 이에따라 일정을 구분하여 출력 해주는 용도로 활용하고 있습니다. (예: 관리자 승인 여부, 일정취소, 일정완료등...)

    문서테이블의 extra_vars 필드는 시스템에 큰 영향을 주지않으면서 사용자가 활용할 수 있는 필드 같으니...
    앞으로도 계속 사용이 가능하면 좋겠습니다.

    감사합니다.
    ksc
  • profile profile
    거기서도 문서 수정시 재입력해 주는 방법으로 때우고 있나요?
  • profile profile

    안녕하세요,

    XE Ver 1.7.4 부터인가(??) extra_vars 필드에 값이 있으면 serialize 하지 않고 그대로 두는것 같습니다.

    플래너XE123에서는 문서 수정시 $oDocument->get('extra_vars') 로 데이터를 불러온 후, 그 값 또는 수정될 값을 셀렉트 박스 값으로 다시 넘겨주는 방법으로 처리하고 있습니다. (결국 재입력 비슷 합니다.)

    감사합니다.
    ksc