날짜 또는 숫자 유형의 메타 데이터 필드에 값을 할당하는 방법은 무엇입니까?
-
12-12-2019 - |
문제
메타 데이터 필드를 처리하는 다음 링크 코드를 사용하고 있습니다. -
https://code.google.com/p/tridion-practice/ 위키 / changeContentorMetAdata
그러나 Date 유형의 메타 데이터 필드에 값을 할당하려고하면 다음 XML 유효성 검사 오류가 발생합니다. -
" System.ServiceModel.FaultException`1. [MyPorject.ServiceReference.CoreServiceFault] : XML 유효성 검사 오류. 이유 : 'uuid : myuuid : datefield'요소가 유효하지 않습니다. '10 / 4 / 2012 03:04:00 am '은 데이터 유형'http://www.w3.org/2001/xmlschema에 따라 유효하지 않습니다. Datetime '- String '10 / 4 / 2012 03:04:00 AM'은 유효한 DateTime 값이 아닙니다. (오류 세부 사항은 MyPorject.ServiceReference.CoreserviceFault) "
아무리 동일한 오류가 발생하는 문자열이나 DateTime 데이터 유형으로 값을 할당할지 여부에 관계없이 DateTime 데이터 유형으로 AddValue 메소드를 과부하하려고 시도했지만 지금까지는 아무 일도 일하지 않았습니다.
AddValue 메소드의 코드 스 니펫 : -
public void AddValue(string value1)
{
string value = string.IsNullOrEmpty(value1) ? null : value1; ;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value;
}
.
날짜와 번호 데이터 유형 모두에 대한 해결책을 제안하십시오. 미리 감사드립니다
해결책 5
촬영하는 데 어려움을 겪은 후에 나는 마침내 날짜의 형식과 함께 문제를 마침내 해결합니다.이를 위해서는 로컬 컴퓨터의 시간대와 서버의 시간대와 일치해야합니다.
과 아래의 오버로드 된 방법의 코드입니다. -
public void AddValue(DateTime value1)
{
DateTime value = value1 == null ? DateTime.MinValue : value1;
XmlElement newElement = fields.AddFieldElement(definition);
if (value != null) newElement.InnerText = value.ToString("yyyy-MM-ddThh:mm:ss");
}
. 다른 팁
오류 메시지는 날짜 형식이 잘못되었다는 사실에 대해 매우 명시 적입니다. The string '10/4/2012 03:04:00 AM' is not a valid DateTime value
.
Tridion 형식은 YYYY-MM-DDThh:mm:ss
이므로 공간이 없으므로 시간대 없음 및 AM / PM 마커가 없습니다.
공식 TRIDION API에서는 일반적으로 DateTime
개체를 수락하고 올바른 형식으로 변환하기 때문에 일반적으로 변환을 수행해야합니다.그러나 사용하는 도우미 클래스가 공식 API가 아니기 때문에 몇 가지 바로 가기가 필요하며 값을 string
로 설정하게합니다.
i는 일반적으로 datetime.ToString("u").Replace(" ", "T").Replace("Z", "")
을 사용하여 올바른 형식으로 날짜를 얻습니다.
날짜 문자열에는 다음과 같은 형식이 있어야합니다.
- yyyy-mm-ddthh : mm : ss
예 :
- "2012-10-03T09 : 39 : 43"
콘텐츠 및 메타 데이터 래퍼를 사용하고 있음을 주어서 날짜를 설정하는 방법이 나에게 조금 복잡해 보입니다. 이와 같은 것이 아닙니다.
string myStringDate = "2012-10-03T09:39:43";
fields["DateFieldName"].Value = myStringDate;
component.Metadata = fields.ToString();
. 내 C # 경험에 따라 이러한 오류가 DateTime 형식 문제로 인해 발생합니다. 코드를 아래로 시도 할 수 있습니다
DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd");
.
코드로 테스트하지는 않았지만 귀하의 경우에 작동을 희망합니다.
형식의 날짜와 시간 사이에 'T'구분 기호가 없습니다.출력 된 날짜가 다시 삽입하려는 형식으로 표시되지만 Attenway에서는 출력을 지정할 수있는 형식이며 반드시 날짜를 지정 해야하는 방식이 아니라는 것을 언급했습니다.
여기서는 XMLSCHEMA Datetime 사양에 대한 닫힌 읽기를 가지고 있습니다. http : // www.w3.org/tr/xmlschema-2/#datetime