docs: public RuleProxyField backChain() {
  		ObjectMetadata objectMetadata = m_proxyField.getObjectMetadata();
  		// loop through the rules that output this field
          for (RuleContext rc: getOutputRules())
          {
          	// loop through the fields needed by this rule to fire
              for (FieldReference fr :rc.getRule().listeners())
              {
              	RuleProxyField rpf = m_ruleSession.getRuleProxyField(objectMetadata.getProxyField(fr.getFieldName()));
          		// if this rpf has no value yet then look for an rpf that can deliver it.
          		// if none is found then return this rpf, else return the one we found.
              	if (rpf.askFor())
              	{
              		RuleProxyField rpf1 = rpf.backChain();
              		if (rpf1 == null)
              		{
              			return rpf;
              		}
              		else
              		{
              			return rpf1;
              		}
              	}
              }
          }
  		return null;
  	}