www.gusucode.com > trading工具箱matlab源码程序 > trading/trading/@emsx/getAllFieldMetaData.m

    function r = getAllFieldMetaData(b)
%GETALLFIELDMETADATA Bloomberg EMSX field information.
%   R = GETALLFIELDMETADATA returns the Bloomberg EMSX field information
%   given the connection handle, B.
%
%   For example,
%
%   r = getAllFieldMetaData(b) returns
%
%   returns
%
%   r = 
%
%       EMSX_FIELD_NAME: {113x1 cell}
%        EMSX_DISP_NAME: {113x1 cell}
%             EMSX_TYPE: {113x1 cell}
%            EMSX_LEVEL: [113x1 double]
%              EMSX_LEN: [113x1 double]
%   where 
%
%   {r.EMSX_FIELD_NAME{1} r.EMSX_DISP_NAME{1} r.EMSX_TYPE{1} r.EMSX_LEVEL(1) r.EMSX_LEN(1)}
%  
%   returns
%
%   ans = 
%
%       'MSG_TYPE'    'Msg Type'    'String'    [0]    [1]
%
%   See also emsx.

%   Copyright 2012 The MathWorks, Inc.

%create and send request
request = b.Service.createRequest('GetAllFieldMetaData');
b.Session.sendRequest(request,[]);

%process event to get field info
iter = true;

while iter
  evt = b.Session.nextEvent(1000);
  evtType = char(evt.eventType);
  msgIter = evt.messageIterator;
  switch evtType
    case 'RESPONSE'
      msg = msgIter.next;
    case 'TIMEOUT'
      iter = false;
  end
end

if ~exist('msg','var')
  r = [];
  return
end

%Parse field meta data
msgMetaData = msg.getElement('MetaData');
numElements = msgMetaData.numValues;
r.EMSX_FIELD_NAME = cell(numElements,1);
r.EMSX_DISP_NAME = r.EMSX_FIELD_NAME;
r.EMSX_TYPE = r.EMSX_FIELD_NAME;
r.EMSX_LEVEL = nan(numElements,1);
r.EMSX_LEN = r.EMSX_LEVEL;

for i = 1:numElements
  tmp = msgMetaData.getValueAsElement(i-1);
  r.EMSX_FIELD_NAME{i} = char(tmp.getElementAsString('EMSX_FIELD_NAME'));
  r.EMSX_DISP_NAME{i} = char(tmp.getElementAsString('EMSX_DISP_NAME'));
  r.EMSX_TYPE{i} = char(tmp.getElementAsString('EMSX_TYPE'));
  r.EMSX_LEVEL(i) = tmp.getElementAsFloat64('EMSX_LEVEL');
  r.EMSX_LEN(i) = tmp.getElementAsFloat64('EMSX_LEN');
end